用android ndk项目构建其他库
Building other library with android ndk project
我很难将dlib与我的android studio NDK项目集成,基本上我想在我的本地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
文件?我也不知道.mk
文件需要作为LOCAL_SRC_FILES
的主要.cpp
文件。
在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进行交叉编译。您的应用程序。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
你的项目结构很好,我认为你差不多成功了。
当您解决了链接错误后,请随时提供您的makefiles的新版本。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用 pybind11 构建库,链接其他共享库
- 如何在 CMake 中构建其他文件夹
- Linux/GCC:是否有一种方法可以检查构建是否与其他机器上的前一个机器相同
- buildroot:仅构建一个包裹作为共享和静态lib,所有其他包装仅共享
- Robocopy在项目中使用具有英语以外的其他名称的文件夹中时会产生构建错误
- 如何构建 boost.log DLL,静态链接到其他所有内容 boost
- 使用其他文件构建 gcc 插件
- 在上构建一个静态c++库,我需要链接到其他库
- C ++中的构建错误,未定义的符号,在这里尝试了其他答案,无法弄清楚
- 使用boost构建NodeJ模块(或任何其他库)
- 用android ndk项目构建其他库
- 是否有可能在OSX 10.6上构建在其他OSX 10.6系统上运行的32位应用程序?
- 如何与其他boost库一起构建boost::fiber
- 在 Eclipse 中使用 OpenCV 在项目中C++构建错误:对"SelectObject@8"的未定义引用 + 许多其他错误
- 使用Visual c++ 2010 Express在其他Windows计算机上运行创建静态/发布构建