2011-12-20 96 views
0

我编译红袜等与NDK。所以,我拥有所有Android友好的共享库。的Android NDK连接问题

我做了一个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_STATIC_LIBRARIES := sox 
LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 

这是我的理解,我不想staticly链接到SOX LIB:

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

但是,如果我指定红袜作为静态库它将工作到它。

回答

1

您应该定义为libsox.so预建图书馆。创建一个makefile如下所示,把你的预建libsox.so在同一目录与此生成的文件。之后,您可以使用与重建它相同的libsox。不要忘记将这个makefile包含到你的构建中。

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libsox 
LOCAL_SRC_FILES := libsox.so 

include $(PREBUILT_SHARED_LIBRARY) 
+0

感谢您的帮助。然而,这不是问题。我已经定义的所有库作为预建这样的:http://pastebin.com/de0u99tu – Matt 2011-12-23 16:39:34

+0

我认为[这](http://stackoverflow.com/questions/3549432/preventing-functions-from-being从静态库中提取 - 何时链接)可能是您的问题。在libsox构建过程中,您尝试从libsox中使用的函数可能会被剥离。你可以使用nm命令来检查它。 – vassilij 2011-12-24 18:31:52