共享库和Android NDK

时间:2015-01-28 17:02:32

标签: android android-ndk shared-libraries

我最近开始使用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?)。

谢谢你的回答。

2 个答案:

答案 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安卓设备上,就是这样)。