android - 使用 android ndk 项目构建其他库

标签 android c++ android-ndk

我很难将 dlib 与我的 android studio NDK 项目集成,基本上我想在我的 native C++ 代码中使用该库,我不确定执行相同操作的标准方法,我有我的 Android.mk 文件位于 app/src/main/jni 下为:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := dlib
LOCAL_SRC_FILES :=  dlib/all/source.cpp
LOCAL_CPPFLAGS  = -I/opt/X11/include
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)

OPENCVROOT:= /Users/anmoluppal/Downloads/OpenCV-android-sdk
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk

LOCAL_MODULE    := ndkDemo
LOCAL_STATIC_LIBRARIES := dlib
LOCAL_SRC_FILES := main.cpp face_detector.cpp face_tracker.cpp ft_data.cpp patch_model.cpp shape_model.cpp

include $(BUILD_SHARED_LIBRARY)

Application.mk 文件看起来像这样:

APP_STL := gnustl_static
APP_CPPFLAGS += -fexceptions -frtti
APP_ABI := all

项目结构是:

+ app
---+ src
-----+ main
-------+ jni
---------+ dlib
---------+ Application.mk
---------+ Android.mk
---------+ (... Other .cpp files)

我收到很多 undefined reference to 错误,这些错误指的是 Mac 上的 X11 库,确实安装正确,我想知道这是不是在 NDK 项目中包含库的正确方法?或者我还需要在 dlib 文件夹中创建一个 Android.mk 文件?此外,我不知道主要的 .cpp 文件需要作为 .mk 文件的 LOCAL_SRC_FILES

ndk-build 之后,我得到以下输出:

[arm64-v8a] Compile++      : ndkDemo <= main.cpp
[arm64-v8a] Compile++      : ndkDemo <= face_detector.cpp
[arm64-v8a] Compile++      : ndkDemo <= face_tracker.cpp
[arm64-v8a] Compile++      : ndkDemo <= ft_data.cpp
[arm64-v8a] Compile++      : ndkDemo <= patch_model.cpp
[arm64-v8a] Compile++      : ndkDemo <= shape_model.cpp
[arm64-v8a] Compile++      : dlib <= source.cpp
[arm64-v8a] StaticLibrary  : libdlib.a
[arm64-v8a] SharedLibrary  : libndkDemo.so

最佳答案

您需要考虑几件事。 第一:您链接的库需要针对各自的 ABI 进行交叉编译。您的 Application.mk 说明了所有内容,因此您需要提供所有内容(arm、x86、MIPS 等)。你的图书馆是预建的吗?在这种情况下,您将需要手动交叉编译它们。

您缺少库的包含目录。您可以将它们包含在:

LOCAL_EXPORT_C_INCLUDES
LOCAL_C_INCLUDES

这是代替使用 CPP-Flags 的方法。

您的 makefile 中还有一些其他问题,您应该通过在 stackoverflow 上检查其他人的 makefile 或在 NDK 文档中搜索来解决这些问题。例如,我认为您不能像以前那样提供 LOCAL_SRC_FILES,您需要像这样用反斜杠将它们分开:

LOCAL_SRC_FILES := \ x.cpp \ y.cpp

你的项目结构很好,我想你快到了。

解决链接错误后,请随时提供新版本的 makefile。

关于android - 使用 android ndk 项目构建其他库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32176988/

相关文章:

c++ - 构建简单的 Firefox 是无止境的?

c++ - 加密++库中的SHA512哈希抛出异常

c - 如何隐藏软导航键(android)

android-studio - 为什么我会收到此 Android Studio 错误 : "recompile with -fPIC"?

java - 安卓错误报告

android - 如何将系统库添加到 Android Studio?

c++ - Qt与Firmata链接

android - 如何在android中使用FFMPEG修剪视频

android - 如何用 Powermockito 模拟最后一个类?

java - Android在尝试使用release()时强制关闭;停止媒体播放器