2012-12-01 59 views
2

我想在Android中使用手动编译的OpenAL共享库。Android NDK:使用OpenAL共享库时出现UnsatisfiedLinkError

include $(CLEAR_VARS) 
LOCAL_MODULE:=openal 
LOCAL_SRC_FILES:=../mylibs/libopenal.so 
LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)/include/AL 
include $(PREBUILT_SHARED_LIBRARY) 

在mylibs文件夹中,我有3个文件:

lrwxr-xr-x 21:12 libopenal.so -> libopenal.so.1 
lrwxr-xr-x 21:12 libopenal.so.1 -> libopenal.so.1.13.0 
-rwxr-xr-x 22:33 libopenal.so.1.13.0 

符合一切正常,但在运行时我得到这个错误:

E/AndroidRuntime(13604): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library:   link_image[1848]: 1296 could not load needed library 'libopenal.so.1' for 'libopenaltest.so'  (load_library[1120]: Library 'libopenal.so.1' not found) 
E/AndroidRuntime(13604): at java.lang.Runtime.loadLibrary(Runtime.java:370) 
E/AndroidRuntime(13604): at java.lang.System.loadLibrary(System.java:535) 
E/AndroidRuntime(13604): at com.hz.openal.OpenActivity.<clinit>(OpenActivity.java:10) 
E/AndroidRuntime(13604): ... 15 more 

谁能帮我解决这个问题?

+1

你的.so文件的数字版本后缀强烈建议这些不是为android构建的库,因为通常的android构建系统不会以这种方式进行版本控制。很可能你正在尝试使用为你的开发机器或其他非android目标构建的库,而这只是简单的不起作用。您可以(在某种程度上)使用'readelf'命令检查库的体系结构。最有可能的是,你最终不得不用ndk构建系统重新编译这些库,或者至少是android编译器(查看独立工具链) –

+0

即使它们是android兼容对象,sym链接也可能无法通过包装和安装。 –

+0

谢谢,我会尽量重建图书馆。 –

回答

1

尝试这样

LOCAL_MODULE := lib3rdparty-prebuilt 
LOCAL_SRC_FILES := lib3rdparty.so 
include $(PREBUILT_SHARED_LIBRARY) 

LOCAL_SHARED_LIBRARIES += lib3rdparty-prebuilt 

我认为你缺少的最后一行LOCAL_SHARED_LIBRARIES .....

,你也没有了“libopenal.so”库加载之前加载“ libopenaltest.so“库。所有库都需要在加载依赖库之前使用System.loadLibrary()加载。

+0

谢谢,我检查了LOCAL_SHARED_LIBRARIES,没关系。我已经加载了“libopenal.so”(System.loadLibrary(“openal”);),但是我得到了同样的错误。 –

相关问题