【问题标题】:Loading shared libs using Android.mk使用 Android.mk 加载共享库
【发布时间】:2012-06-13 11:49:45
【问题描述】:

使用 ndk-build 编译时如何指定要加载到 Android.mk 中的共享库?

编辑:这是我的 Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := lib-crypto
LOCAL_SRC_FILES := libcrypto.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := tema1
LOCAL_SRC_FILES := tema1.c
LOCAL_SHARED_LIBRARIES := lib-crypto
LOCAL_C_INCLUDES := /home/aleksei/openSSL0.9.8/include
include $(BUILD_EXECUTABLE)

libcrypto.so 是我为 android 构建的库。我想用它制作一个程序。现在它给了我这个错误:

Install        : libcrypto.so => libs/armeabi/libcrypto.so
Executable     : tema1
./obj/local/armeabi/libcrypto.so: undefined reference to `dladdr'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/tema1] Error 1

【问题讨论】:

  • @Mr.32 我不得不提到 libcrypto.所以已经使用 ndk-build for android 构建。并且包含路径指向我为 ubuntu 安装的 openSSL 的标头,但应该是一样的吧?

标签: android c android-ndk


【解决方案1】:
PREBUILT_SHARED_LIBRARY
    Points to a build script used to specify a prebuilt shared library.
    Unlike BUILD_SHARED_LIBRARY and BUILD_STATIC_LIBRARY, the value
    of LOCAL_SRC_FILES must be a single path to a prebuilt shared
    library (e.g. foo/libfoo.so), instead of a source file.

    You can reference the prebuilt library in another module using
    the LOCAL_PREBUILTS variable (see docs/PREBUILTS.html for more
    information).

阅读更多来自http://source-android.frandroid.com/ndk/docs/ANDROID-MK.html

告诉我你到目前为止做了什么以及你遇到问题的地方。?

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。为了解决这个问题,我做了以下事情:

    1. 在与您的 Android.mk 文件相同的目录中,创建一个名为 Application.mk 的文件
    2. 将以下代码行添加到 Application.mk 中: "APP_PLATFORM := android-8"

    如果您已有 Application.mk 文件,只需将步骤 2 中的代码添加到现有文件中即可。现在调用 ndk-build 并查看它是否链接。 ndk-build 可能正在使用没有 dladdr() 的旧版本 libdl 进行编译。步骤 2 中的代码将导致 ndk-build 使用具有 dladdr() 的更新 libdl。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 2019-04-17
      相关资源
      最近更新 更多