jnative在linux下对c程序的动态链接库的调用问题及解决方案
2009-03-26 22:23
363 查看
我下载了jnative的JNative_1.4RC3_src版本,在windows下按照常规操作步骤,将JNativeCpp.dll文件放到windows/system32目录下,然后进行jni编程,执行情况顺利。
但是当我们将相同的程序放到linux下,并且将libJNativeCpp.so拷贝到/usr/lib下,然后执行的时候,发现我们的程序根本执行不了,这个时候,我进行了断点查看,发现那个jnative.jar文件中执行结果是这样的,如果是windows,直接找windows/system32/下的JNativeCpp.dll文件进行加载。
如果是linux下的,那么他会调用一个system.getProperties("jnative.loadNative")来查找我们的libJNativeCpp.so,如果找不到,就直接到jnative.jar中寻找。
这里我通过在调用之前设定了System的properties的jnative.loadNative值:
System.setProperty("jnative.loadNative", "/usr/lib/libJNativeCpp.so");
然后将libJNativeCpp.so放到该位置以供加载。
但是结果仍旧是有问题,不论设置不设置都报错。经过断点跟踪发现,错误是“/lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by ./libJNativeCpp.so”
这个错误引发原因就是libJNativeCpp.so被编译时的linux内核版本较低或者较高造成的。在当前平台上已经没有相关的组件支持了。
解决方案:
JNative_1.4RC3_src是没有libJNativeCpp.so的源文件的。但是Jnative.1.3.2版本中有。将他下边的源文件在我们要安装的linux系统下执行编译出一个libJNativeCpp.so文件。
测试是否编译成功:ldd libJNativeCpp.so
如果成功,会看到他依赖的组件都存在:
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0069c000)
libm.so.6 => /lib/tls/libm.so.6 (0x00111000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00562000)
libc.so.6 => /lib/tls/libc.so.6 (0x00134000)
/lib/ld-linux.so.2 (0x0097b000)
如果是版本不对,可能会显示
./libJNativeCpp.so: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by ./libJNativeCpp.so)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0047e000)
libm.so.6 => /lib/tls/libm.so.6 (0x00111000)
libc.so.6 => /lib/tls/libc.so.6 (0x0056e000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00c3d000)
/lib/ld-linux.so.2 (0x0097b000)
但是当我们将相同的程序放到linux下,并且将libJNativeCpp.so拷贝到/usr/lib下,然后执行的时候,发现我们的程序根本执行不了,这个时候,我进行了断点查看,发现那个jnative.jar文件中执行结果是这样的,如果是windows,直接找windows/system32/下的JNativeCpp.dll文件进行加载。
如果是linux下的,那么他会调用一个system.getProperties("jnative.loadNative")来查找我们的libJNativeCpp.so,如果找不到,就直接到jnative.jar中寻找。
这里我通过在调用之前设定了System的properties的jnative.loadNative值:
System.setProperty("jnative.loadNative", "/usr/lib/libJNativeCpp.so");
然后将libJNativeCpp.so放到该位置以供加载。
但是结果仍旧是有问题,不论设置不设置都报错。经过断点跟踪发现,错误是“/lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by ./libJNativeCpp.so”
这个错误引发原因就是libJNativeCpp.so被编译时的linux内核版本较低或者较高造成的。在当前平台上已经没有相关的组件支持了。
解决方案:
JNative_1.4RC3_src是没有libJNativeCpp.so的源文件的。但是Jnative.1.3.2版本中有。将他下边的源文件在我们要安装的linux系统下执行编译出一个libJNativeCpp.so文件。
测试是否编译成功:ldd libJNativeCpp.so
如果成功,会看到他依赖的组件都存在:
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0069c000)
libm.so.6 => /lib/tls/libm.so.6 (0x00111000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00562000)
libc.so.6 => /lib/tls/libc.so.6 (0x00134000)
/lib/ld-linux.so.2 (0x0097b000)
如果是版本不对,可能会显示
./libJNativeCpp.so: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by ./libJNativeCpp.so)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0047e000)
libm.so.6 => /lib/tls/libm.so.6 (0x00111000)
libc.so.6 => /lib/tls/libc.so.6 (0x0056e000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00c3d000)
/lib/ld-linux.so.2 (0x0097b000)
相关文章推荐
- jnative在linux下对c程序的动态链接库的调用问题及解决方案
- linux下动态链接问题(.so文件的编写与调用)
- linux下动态链接问题(so文件的编写与调用)
- 程序的链接和装入及Linux下动态链接的实现
- dlopen 方式调用 Linux 的动态链接库
- 程序的链接和装入及Linux下动态链接的实现
- 程序的链接和装入及Linux下动态链接的实现
- JNative调用动态函数链接库
- linux下由于线程局部存储未初始化导致加载动态链接库时程序崩溃的BUG
- Linux动态链接库同名符号装载问题(一)
- Erlang的crypto模块与最新的openssl动态链接库不兼容的问题与解决方案
- 程序调用动态链接库中的方法,位图,类
- QT程序发布的一个问题:无法定位程序输入点与动态链接库QtCore4.dll
- Linux C程序的链接和装入及Linux下动态链接的实现-IBM
- Linux下创建CUDA程序动态链接库示例
- dll动态链接库之用类写配置文件和调用判断方法接口的实现中遇到的若干问题
- 使用Java的JNative调用dll动态链接库
- linux下编译C++程序无法链接Mysql的问题
- Linux下动态链接库的创建和使用及C调用matlab动态库问题
- 程序的链接和装入及Linux下动态链接的实现