Android NDK链接问题
我用NDK编译了Sox等人。 所以,我有所有Android友好的共享库。
我做了一个调用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)