【发布时间】:2015-01-02 17:31:11
【问题描述】:
如何为 android 构建外部 c++ 库(静态或共享)?
嗨,
目前我正在尝试使用 JNI 从我的 android 应用程序中调用 c++ 库。 一个简单的例子,我刚刚直接实现了jni生成的c++文件,效果很好。
现在我想生成一个外部 c++ 库并在 jni c++ 实现中调用它。 这样 jni 实现只定义了接口,整个功能位于外部静态 c++ 库中。
为此,我使用 eclipse (ubuntu 32bit) 创建了一个 c++ 项目。
项目结构如下:
StaticLibraryTest
-> src
-> bean -> Point
-> util -> Math
-> StringUtil
该项目只是实现了简单的测试方法。
现在我有一个问题:如何构建这个项目,以便我可以在 jni c++ 实现中使用它。我在执行 ndk-build 时遇到问题。
我的 jni 文件夹如下所示:
NativeTestProject
-> jni
-> calc -> de_tl_calc_SharedLibraryInterface.h
-> de_tl_calc_SharedLibraryInterface.cpp
-> inc
-> **/*.h(all header files from the external StaticLibraryTest library)
-> libStaticLibraryTest.a (my external library)
-> Application.mk (just containing the line: APP_ABI := all)
-> Android.mk
Android.mk 包含以下几行:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libStaticLibraryTest
LOCAL_SRC_FILES := libStaticLibraryTest.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/inc
LOCAL_SRC_FILES := calc/de_tl_calc_SharedLibraryInterface.cpp
LOCAL_MODULE := de_tl_calc_SharedLibraryInterface
LOCAL_STATIC_LIBRARIES := libStaticLibraryTest
include $(BUILD_SHARED_LIBRARY)
如果有人能帮助我找到正确的方法,我会很高兴。
编辑:
我想我迈出了下一步。我使用 arm-linux-gnueabi 创建了外部静态库,现在执行 ndk-build 时出现以下错误:
$ ndk-build
[arm64-v8a] Compile++ : de_tl_calc_SharedLibraryInterface <= de_tl_calc_SharedLibraryInterface.cpp
[arm64-v8a] SharedLibrary : libde_tl_calc_SharedLibraryInterface.so
collect2.exe: error: ld returned 5 exit status
/cygdrive/k/android-ndk64-r10-windows-x86_64/build/core/build-binary.mk:647: recipe for target 'obj/local/arm64-v8a/libde_tl_calc_SharedLibraryInterface.so' failed
make: *** [obj/local/arm64-v8a/libde_tl_calc_SharedLibraryInterface.so] Error 1
make: *** Deleting file 'obj/local/arm64-v8a/libde_tl_calc_SharedLibraryInterface.so'
【问题讨论】:
标签: android c++ static android-ndk java-native-interface