`
birdmen
  • 浏览: 38513 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JNative在Linux下应用的若干问题

阅读更多
  在一项目中,使用JNative替代JAVA的JNI来做跨语言调用,在LINUX环境下遇到若干问题。
  首先是libJNativeCpp.so文件的版本问题,为调试问题,打开JNative的DEBUG日志开关,并指定libJNativeCpp.so的地址,不指定亦可,会到jar包加载该文件。
 
  System.setProperty("jnative.debug", "true");
  System.setProperty("jnative.loadNative","/usr/lib/libJNativeCpp.so");
  

  调用函数时,遇到这样的问题:
 
   JNative library not loaded, sorry !java.lang.IllegalStateException: JNative library not loaded, sorry !
  

  打开JNative的DEBUG日志开关后,发现如下错误信息:
 
   /usr/lib/libJNativeCpp.so: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by /usr/lib/libJNativeCpp.so)
  

  查看源码,发现错误原因是由于System.load("/usr/lin/libJNativeCpp.so")失败,异常信息即为上面贴出信息。GLIBC_2.4是linux下的一个c运行库的版本号。
  通过# ldd libJNativeCpp.so可以查看该文件的依赖关系。
  在版本不一致的情况下通常显示如下:
 
  [root@localhost lib]# ldd libJNativeCpp.so 
./libJNativeCpp.so: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by ./libJNativeCpp.so)
        linux-gate.so.1 =>  (0xffffe000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xf7ef5000)
        libm.so.6 => /lib/tls/libm.so.6 (0xf7ed2000)
        libc.so.6 => /lib/tls/libc.so.6 (0xf7da7000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf7d9f000)
        /lib/ld-linux.so.2 (0x56555000)
  

  到/lib下,查看系统当前glibc的版本信息:
  [root@localhost lib]# cd /lib
   lrwxrwxrwx  1 root root      13 2010-01-05  libc.so.6 -> libc-2.3.4.so
  

   发现系统当前的glibc的版本是2.3.4,低于我们下载的应用包里的libJNativeCpp.so的编译环境.当其依赖的文件版本冲突时,低版本会导致不能成功调用该文件。

  介绍下GLIBC。
  glibc是gnu发布的libc库,也即c运行库。glibc是linux系统中最底层的api(应用程序开发接口),几乎其它任何的运行库都会倚赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。

  介绍了GLIBC,自然要介绍一下GCC。
  gcc(gnu   collect   compiler)是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”,以及提供了与编译器紧密相关的运行库的支持,如libgcc_s.so、libstdc++.so等。
  如何解决问题,已经快浮现了。
  在当前linux环境下,使用GCC编译器编译libJNativeCpp.so的源文件,生成依赖于当前环境下的libJNativeCpp.so文件。

  华山一条路,来说说如何编译。
  下载JNative-1.3.2-src.zip,解压后,在JNative-1.3.2-src\JNativeCpp 下可以找到编译libJNativeCpp.so的源文件。上传该JNativeCpp文件夹到你的Linux服务器,在JNativeCpp/Release目录下,编译我们需要的基于libc-2.3.4.so的libJNativeCpp.so文件。
 
1
3
分享到:
评论

相关推荐

    JNative.jar以及JNative源码

    这两个文件是JNative库的本地实现部分,它们分别对应Windows和Linux下的动态链接库。当Java程序运行时,JNative.jar会加载对应的本地库,通过JNI桥接,实现Java与本地代码的交互。这意味着JNative不仅支持Windows...

    jnative

    `JNativeCpp.dll`是Windows系统的DLL文件,而`libJNativeCpp.so`是Linux下的共享库。 3. **jnative 库**:`JNative.jar`是包含Java部分的库文件,提供了Java调用C++ DLL或共享库的API。使用这个库,开发者可以在...

    jnative调用动态库

    3. libJNativeCpp.so:这是Unix-like系统下的动态链接库,与JNativeCpp.dll类似,提供JNative在Linux、AIX或HP-UX等系统上与C++库交互的能力。 通过这些文件,开发者可以在Java应用程序中利用JNative库,无论是...

    linux jnative 调用.so方法及附属全部库和源码

    //以下部分使用qt编译到so,注意在函数声明前加 extern "C" //如extern "C" const char* getLocalHost(); JNative getstring = new JNative("libmylib.so", "getstring"); getstring.setRetVal(Type.STRING); ...

    JNative v1.3 docs

    jnative包用于调用dll动态库,目前(2011-12-20)最新版本为1.4RC2,官方正式版本文档为1.3,详见官方地址: http://jnative.free.fr/docs/ 这是最新的帮助文档HTML离线包,希望对大家有帮助 Packages org.xvolks....

    JNative.jar 包

    在提供的文件列表中,我们可以看到两个与JNative.jar相关的本地库文件:JNativeCpp.dll(Windows平台)和libJNativeCpp.so(Linux平台)。这两个文件是JNative库的本地实现部分,分别对应于Windows和Linux操作系统。...

    JNative api说明文档

    **JNative API说明文档** ...通过深入理解和熟练使用JNative API,开发者可以解决特定场景下的性能问题,提升应用程序的效率。而Javadoc作为API文档,是开发者学习和使用JNative不可或缺的参考资料。

    jnative源码和文档,包含JNativeCpp.dll和libJNativeCpp.so

    1. **设置环境**:确保Java项目包含JNative的库文件,Windows下需要设置系统路径以包含JNativeCpp.dll,Linux下则需确保libJNativeCpp.so在可执行文件的搜索路径中。 2. **编写Java代码**:在Java类中声明本地方法...

    Jnative资源包源码

    《Jnative资源包源码详解》 Jnative是一款强大的...理解并熟练运用Jnative,不仅可以提升开发效率,还能解决Java在特定场景下的局限性。通过对Jnative源码的学习,开发者可以深入掌握JNI原理,提升自己的编程能力。

    JNATIVE应用

    **JNATIVE应用详解** Java Native Interface(JNI)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都扮演着关键角色,比如当需要访问操作系统底层功能,如硬件设备控制、图形...

    jnative.rar

    在软件开发中,有时我们需要在Java应用程序中调用本地系统库,例如Windows平台下的动态链接库(DLL)。为了实现这一目标,Java提供了一个名为JNative的库,它允许Java代码与C/C++编写的本地代码进行交互,从而扩展了...

    在Java程序中使用JNative调用dll文件

    在Java程序中调用DLL(动态链接库)文件通常是通过JNI(Java Native Interface)来实现的,而JNative是JNI的一个封装库,它提供了一种更简洁的方式来调用C/C++编写的本地代码。这篇博客文章可能介绍了如何利用...

    JNative.jar和JNativeCpp.dll

    在IT行业中,这样的组合通常用于实现Java应用与原生系统资源的紧密集成,例如调用操作系统底层功能或者加速计算密集型任务。 首先,我们来详细了解一下JNative.jar。这是一个Java类库,它提供了Java应用程序调用...

    JNative使用示例

    TestJNative_Eclipse.rar 为MyEclipse工程 JNativeTest_VC.rar为VC ...主要写了一些JNative调用DLL的例子,包含了JNative回调函数的用法与指针的用法,以供参考,希望对使用JNative的开发人员有帮助 有问题大家一起讨论

    JNative Java调用动态链接库jar包

    此时,我们通常需要借助于本地代码,也就是C、C++编写的动态链接库(DLL,Windows下)或共享库(Linux下)。JNative是一个Java库,它为Java程序员提供了一种直接调用这些本地代码的能力,无需通过JNI(Java Native ...

    jnative的jar包

    5. **跨平台性**:作为Java库,jNative应该能在任何支持Java的平台上运行,包括Windows、Linux、Mac OS等。 6. **使用场景**:jNative适合于那些需要高性能处理大量文本或二进制数据的Java应用,比如大数据分析、...

    JNative-1.3.2.zip

    在Java程序中,通过JNative.jar调用libJNativeCpp.so,可以在Linux系统上实现Java对本地代码的调用。 总的来说,JNative-1.3.2.zip包含的这些组件构成了一个完整的解决方案,使得Java开发者能够跨越语言的界限,...

    jnative 1.4

    jnative 1.4 jnative 1.4 jnative 1.4 jnative 1.4 jnative 1.4 jnative 1.4 jnative 1.4 jnative 1.4

    JNative.rar

    通过JNative,开发者可以充分利用C++的高性能和灵活性,解决Java在某些场景下性能不足的问题,例如图形处理、游戏开发、科学计算等。同时,由于Java的跨平台特性,JNative也支持在多种操作系统上运行,使得应用具有...

    jnative使用方法总结

    jnative使用方法总结jnative使用方法总结jnative使用方法总结

Global site tag (gtag.js) - Google Analytics