我最近开始使用Android NDK,而且我遇到了共享库的一些问题
我用Eclipse创建了一个项目,允许我使用NDK和本机函数。但是现在,我想使用我用QtCreator创建的另一个共享库。
所以这是我的问题。是否可以在我的NDK项目中包含一个共享库,即使我没有调用ndk-build来创建它?
我们来举个例子吧。如果我创建一个这样的简单共享库:
g++ -Wall -shared -fPIC -o libapi.so MyDLL.cpp
我是否可以在我的NDK项目中使用它(Android.mk):
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := api
LOCAL_SRC_FILES := ../sharedLibs/libapi.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := dbapi
LOCAL_SRC_FILES := dbapi.cpp
LOCAL_C_INCLUDES += ../includes
LOCAL_SHARED_LIBRARIES := api
include $(BUILD_SHARED_LIBRARY)
当然,我可以在我的原生NDK端使用它的功能吗?
使用这种方法,当我尝试构建Eclipse项目时,我遇到了这个错误:
/libs/armeabi-v7a/libapi.so: File format not recognized
我以为我的共享库与ndk-build不兼容(true,false?)。
谢谢你的回答。
答案 0 :(得分:2)
您是如何构建共享库的?用NDK编译为arm吗? 如果没有,它就无法运作。
答案 1 :(得分:1)
评论中的人表示你几乎肯定是为x86而不是arm编译的。 (你说你在Windows上使用cygwin,默认情况下会编译为x86,除非你的windows box是一个arm box,我估计不是这样。)
Android ndk内部是一个名为make-standalone-toolchain.sh的脚本。如果您位于安装ndk的当前目录中,则可以通过键入:
来使用此目录./android-ndk-r9/build/tools/make-standalone-toolchain.sh --platform=<your desired android platform> --install-dir=<location where you want android toolchain>
这将创建一组构建工具,您可以使用它们来构建在您的设备上运行的arm二进制文件。这些工具将命名为例如
arm-linux-androideabi-gcc
将这些工具放在您的路径中并使用它们来构建您的库。
我不知道cygwin是否包含&#34;文件&#34;命令,但您可以通过键入以下内容来确定共享库的体系结构:
file libapi.so
如果它说它的手臂,那你很好。如果它说x86,它就不会工作(除了在x86安卓设备上,就是这样)。