用android ndk项目构建其他库

时间:2015-08-24 07:50:59

标签: android c++ android-ndk

我很难将dlib与我的android studio NDK项目集成,基本上我想在我的原生C ++代码中使用该库,我不确定这样做的标准方法,我有{{{ 1}} 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) 错误,这些错误指的是Mac上的undefined reference to库,它确实已正确安装,我想知道这是否是包含库的正确方法NDK项目?或者我也需要在X11文件夹中创建一个Android.mk文件?此外,我不知道dlib文件所需的主.cpp文件LOCAL_SRC_FILES

.mk之后,我得到以下输出:

ndk-build

1 个答案:

答案 0 :(得分:1)

您需要考虑几件事情。 第一:您链接的库需要针对各自的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。

相关问题