加载C++;通过linux上的Java进程共享库给出错误

加载C++;通过linux上的Java进程共享库给出错误,java,c++,linux,centos,Java,C++,Linux,Centos,(开发人员环境:CentOS 4.7、KDevelop 3.1.1、gcc 3.4.6) < >我创建了一个C++共享库和一个使用这个共享库的测试可执行文件。事情进展顺利 但当我通过Java ie Java调用JNI加载这个库时,JNI又加载了这个共享库,出现了一个错误,它指出“*glibc detected*free():下一个大小无效”。应用程序在此之后退出。此错误发生在共享库的加载阶段 有人能提出可能的原因吗 我使用的是Java版本1.6.0_17(build 1.6.0_17-b04)。

(开发人员环境:CentOS 4.7、KDevelop 3.1.1、gcc 3.4.6)

< >我创建了一个C++共享库和一个使用这个共享库的测试可执行文件。事情进展顺利

但当我通过Java ie Java调用JNI加载这个库时,JNI又加载了这个共享库,出现了一个错误,它指出“*glibc detected*free():下一个大小无效”。应用程序在此之后退出。此错误发生在共享库的加载阶段

有人能提出可能的原因吗

我使用的是Java版本1.6.0_17(build 1.6.0_17-b04)。此版本与C/C++运行库之间是否存在兼容性问题

[Doing rpm-q在我的机器上显示glibc版本为glibc-2.3.4-2.41,libstdc++版本为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)

]

有关gcc对ABI的作用,请参阅gcc文档中的章节和后续章节。

是否确定发生错误时没有代码正在运行?您有JNI OnLoad函数吗?一些静态构造函数

一般来说,您描述的整体结构“只起作用”,因此我将查看您的代码

如果在调试器中运行Java,并在System.loadLibrary之前放置一个断点(Java),则可以使用gdb附加到进程并将断点设置为空闲。然后继续java调试器并查看您在gdb中看到的内容