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

07-24 14:12