我用 NDK 编译了 Sox 等。所以,我拥有所有 Android 友好的共享库。
我制造了一个简单的测试文件 http://pastebin.com/rniwQ7Gz它调用 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)