Android NDK 链接问题

标签 android c linker android-ndk ld

我用 NDK 编译了 Sox 等。所以,我拥有所有 Android 友好的共享库。

我做了一个simple test file它调用 sox 函数。 NDK 构建告诉我:

undefined reference to `sox_open_read'

sox_open_read 在 sox.h 中定义。我知道它正在查找 sox.h,因为它向我发出了有关该文件的警告:

In file included from (...)/sox/sox.h:19

所以也许它想在实际的 libsox.so 中找到 sox_open_read。好吧,我尝试了大约 100 种不同的方法来告诉它 sox 共享库在哪里,例如

LOCAL_SHARED_LIBRARY := sox
LOCAL_LDLIBS    := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so

但是,如果我将 Sox 指定为静态库,它将起作用:

#LOCAL_SHARED_LIBRARY := sox
LOCAL_STATIC_LIBRARIES := sox
LOCAL_LDLIBS    := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so

据我了解,我不想静态链接到 sox 库 - 我想动态链接到它。

最佳答案

您应该将 libsox.so 定义为预构建库。创建一个如下所示的 makefile,并将预构建的 libsox.so 与此 makefile 放在同一目录中。之后,您可以像重建它一样使用 libsox。不要忘记将此 makefile 包含到您的构建中。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libsox
LOCAL_SRC_FILES := libsox.so

include $(PREBUILT_SHARED_LIBRARY)

关于Android NDK 链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8582765/

相关文章:

c - C 中的函数指针

填充数组的代码突然改变变量(C)

linker - ESP8266:我该如何克服 "section ` .text' 不适合区域 `iram1_0_seg' 的问题?

android - 将 open gl 与应用程序代码同步

java - android 2.3.6版本中的NoClassDefFoundError(HttpResponseCahe)

android - Flutter:Firestore 组件不存在

c - 使用 calloc 进行赋值

visual-studio-2010 - Zlibstat.lib链接错误,VS 2010,zlib 1.2.8

c++ - 如何通过 GNU Autotools 链接共享库

android - Android 上 react-native 中键盘的精确高度(带自动更正)