jnative在linux下对c程序的动态链接库的调用问题及解决方案

我下载了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)

今天的长相厮守,只是尽力而为而已。

jnative在linux下对c程序的动态链接库的调用问题及解决方案

相关文章:

你感兴趣的文章:

标签云: