共享库和 Android NDK

Shared library and Android NDK

我最近开始使用 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 不兼容(对,错?)。

谢谢你的回答。

您是如何构建共享库的?它是用 NDK 为 arm 编译的吗? 否则无法正常工作。

评论中的人表示您几乎肯定是为 x86 而不是 arm 编译的。 (你说你正在使用带 Windows 的 cygwin,默认情况下它将编译为 x86,除非你的 windows 盒子是一个手臂盒子,我猜不是这种情况。)

在 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 是否包含 "file" 命令,但您可以通过键入以下内容来确定共享库的体系结构:

file libapi.so

如果它说是手臂,那你就很好。如果它显示 x86,它将无法工作(除了在 x86 android 设备上,即)。