Chinaunix首页 | 论坛 | 博客
  • 博客访问: 840130
  • 博文数量: 190
  • 博客积分: 2991
  • 博客等级: 少校
  • 技术积分: 2400
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-24 18:11
文章分类

全部博文(190)

文章存档

2015年(3)

2014年(1)

2013年(65)

2012年(121)

我的朋友

分类: Java

2013-04-07 12:02:37

我下载了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)
原文参考自web开发网:

阅读(1257) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~