【问题标题】:Shared library and Android NDK共享库和 Android NDK
【发布时间】:2015-03-27 16:44:47
【问题描述】:

我最近开始使用 Android NDK,但在共享库方面遇到了一些问题。
我用 Eclipse 创建了一个项目,它允许我使用 NDK 和 natives 函数。但现在,我想使用我用 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 不兼容(对,错?)。

谢谢你的回答。

【问题讨论】:

    标签: android android-ndk shared-libraries


    【解决方案1】:

    您是如何构建共享库的?它是用 NDK 为 arm 编译的吗? 如果没有,它就无法工作。

    【讨论】:

    • 感谢您的回答。我用这个单一的命令行构建了它:g++ -Wall -shared -fPIC -o libapi.so MyDLL.cpp。所以根据你的说法,如果我不使用 ndk builder,我就不能包含这个库?
    • 所以你在 linux 上编译,使用你的发行版中的 g++,而不是 ndk 中的 g++?
    • 我在 windows 上,使用 cygwin,没有 ndk g++。我尝试为我的 C++ 项目创建一个 Android.mk,并调用了 ndk-build... 它工作正常,谢谢 :)
    【解决方案2】:

    cmets 中的人表示您几乎可以肯定是为 x86 而不是 arm 编译的。 (你说你在 Windows 上使用 cygwin,默认情况下它会编译为 x86,除非你的 windows 盒子是 arm 盒子,我猜不是这样。)

    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 libapi.so
    

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

    【讨论】:

    • 确实,file libapi.so 还给我x86-64, for MS Windows。感谢您的解释。
    猜你喜欢
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多