2013-10-23 75 views
1

我有一個Java程序需要加載本地代碼庫(通過JNI和SWIG),但是當我嘗試運行它時,出現如下錯誤:從java加載庫時出現「undefined symbol:__cxa_pure_virtual」錯誤

Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/local/lib/libmyapp_jni.so.0.0.0: /usr/local/lib/libmyapp_jni.so.0.0.0: undefined symbol: __cxa_pure_virtual 
    at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
    at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1939) 
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1864) 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854) 
    at java.lang.Runtime.loadLibrary0(Runtime.java:845) 
    at java.lang.System.loadLibrary(System.java:1084) 
    at org.myapp.myapp.main(myapp.java:11) 

使用LDD -d /usr/local/lib/libmyapp_jni.so.0.0.0

$ldd -d /usr/local/lib/libmyapp_jni.so.0 
    linux-vdso.so.1 => (0x00007ffffedfe000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007feacde2a000) 
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feacdc26000) 
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007feacda0e000) 
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007feacd7f8000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feacd42f000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007feace5a2000) 
undefined symbol: __cxa_pure_virtual (/usr/local/lib/libmyapp_jni.so.0) 
undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE (/usr/local/lib/libmyapp_jni.so.0) 
undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE (/usr/local/lib/libmyapp_jni.so.0) 
undefined symbol: _ZTVN10__cxxabiv121__vmi_class_type_infoE (/usr/local/lib/libmyapp_jni.so.0) 
undefined symbol: _ZSt7nothrow (/usr/local/lib/libmyapp_jni.so.0) 
undefined symbol: __gxx_personality_v0 (/usr/local/lib/libmyapp_jni.so.0) 

我真的不知道哪裏出了問題?

有什麼想法?

非常感謝。

回答

3

在重新檢查所有與我的問題有關的問題後,我找到了答案 Mark Seaborn問題:What is the purpose of __cxa_pure_virtual?解決了我的問題。

由於我的jni庫是由autotools管理的,所以向AM_LDFLAGS的Makefile.am問題中添加「-Wl,-gc-sections -fPIC -shared -lstdC++」問題就解決了。如果代碼是由C++編譯器編譯的(例如g ++),libstdC++可能不是必需的。

希望這可以幫助其他人有同樣的問題。

相關問題