2010-02-26 91 views
0

(Developer環境:CentOS的4.7,KDevelop的3.1.1,3.4.6 GCC)加載C++通過Java過程在Linux給錯誤共享庫

我創建一個C++共享庫,並使用該共享庫的測試可執行。事情工作正常。

但是,當我通過Java加載這個庫,即Java調用JNI,然後加載這個共享庫時,有一個錯誤,指出「* glibc檢測到* free():invalid next size」。應用程序在此之後退出。這個錯誤出現在共享庫的加載階段。

任何人都可以提出可能的原因是什麼?

我正在使用Java版本1.6.0_17(版本1.6.0_17-b04)。這個版本和C/C++運行時庫之間可能存在兼容性問題嗎?

[否則轉-q顯示我的機器上的glibc-2.3.4-2.41和libstdC++ glibc版本版本的libstdC++ - 3.4.6-10

ldd of shared library shows the following, 
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00173000) 
libssl.so.4 => /lib/libssl.so.4 (0x00286000) 
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00185000) 
libm.so.6 => /lib/tls/libm.so.6 (0x00111000) 
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00134000) 
libc.so.6 => /lib/tls/libc.so.6 (0x002ba000) 
/lib/ld-linux.so.2 (0x008a4000) 
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00785000) 
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x003e9000) 
libcom_err.so.2 => /lib/libcom_err.so.2 (0x0013e000) 
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x006ae000) 
libresolv.so.2 => /lib/libresolv.so.2 (0x00672000) 
libcrypto.so.4 => /lib/libcrypto.so.4 (0x0044e000) 
libdl.so.2 => /lib/libdl.so.2 (0x00540000) 
libz.so.1 => /usr/lib/libz.so.1 (0x00141000) 

]

回答

1

當錯誤發生時,您確定沒有任何代碼正在運行嗎?你有JNI OnLoad函數嗎?一些靜態構造函數?

通常,您描述的總體結構「正常工作」,所以我會查看您的代碼。

如果您在調試器中運行Java並在System.loadLibrary之前放置一個斷點(以Java語言編寫),則可以使用gdb附加到進程並免費設置斷點。然後繼續java調試器,看看你在gdb中看到了什麼。