【问题标题】:Android NDK: Linking x86 shared libraryAndroid NDK:链接 x86 共享库
【发布时间】:2015-04-06 02:51:48
【问题描述】:

给了我一个基于 Linux x86 构建的共享库,我们称之为 libA.so,我想使用这个库 SDK 提供的函数调用。

我在构建时遇到问题并有几个问题:

1) 我可以为 x86 构建,但我可以为 arm 构建吗?我相信答案是否定的,这意味着我不能在 Nexus 5 上运行。 2) ndk-build 抱怨应该由我的 LOCAL_SHARED_LIBRARIES 解决的#include。我不确定为什么会这样。我的 Android.mk 如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := B
LOCAL_SRC_FILES := B.cpp

LOCAL_SHARED_LIBRARIES := A
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)

有人可以帮我解决我的 Android.mk 问题吗?我不明白为什么它抱怨我在 B.cpp 中的 include 语句。请告诉我是否可以在 arm 环境中运行 B,尽管我所依赖的 SDK 是基于 x86 构建的。

【问题讨论】:

  • 你能发布你得到的错误吗?另外,您能否澄清一下:您只有为 x86 编译的 libA.so 的二进制版本,没有 libA.so 的源代码,并且您希望在自己的 B.cpp 中有代码,它将调用来自 libA.so 的函数?
  • 是的,你是对的!

标签: android makefile android-ndk


【解决方案1】:

如果你的共享库 libA.so 是为 linux-x86 编译的,它肯定不会在 android x86 目标上运行(主要是因为它需要链接到 Bionic C 库而不是 glibc),而且绝对不能在 android arm设备。

然后,为了解决您的第二个问题,如果您可以为您的 android 目标正确编译 android 共享库,您可以通过这种方式包含您的库:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := A
LOCAL_SRC_FILES := ../libA/prebuilts/$(TARGET_ARCH_ABI)/libA.so # path to libA .so file, depending on the target ABI.
LOCAL_EXPORT_C_INCLUDES := ../libA/includes # path to libA headers.
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := B
LOCAL_SRC_FILES := B.cpp
LOCAL_SHARED_LIBRARIES := A
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    相关资源
    最近更新 更多