如何为android构建一个外部C++库(静态或共享)?如何为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建造:
$ 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'