0

使用 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
4

2 回答 2

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阅读更多内容

告诉我你到目前为止做了什么以及你在哪里遇到问题。?

于 2012-06-13T11:55:31.243 回答
0

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

  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。

于 2012-07-26T22:33:01.633 回答