我用 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/