在一项目中,使用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文件。
分享到:
相关推荐
这两个文件是JNative库的本地实现部分,它们分别对应Windows和Linux下的动态链接库。当Java程序运行时,JNative.jar会加载对应的本地库,通过JNI桥接,实现Java与本地代码的交互。这意味着JNative不仅支持Windows...
`JNativeCpp.dll`是Windows系统的DLL文件,而`libJNativeCpp.so`是Linux下的共享库。 3. **jnative 库**:`JNative.jar`是包含Java部分的库文件,提供了Java调用C++ DLL或共享库的API。使用这个库,开发者可以在...
3. libJNativeCpp.so:这是Unix-like系统下的动态链接库,与JNativeCpp.dll类似,提供JNative在Linux、AIX或HP-UX等系统上与C++库交互的能力。 通过这些文件,开发者可以在Java应用程序中利用JNative库,无论是...
//以下部分使用qt编译到so,注意在函数声明前加 extern "C" //如extern "C" const char* getLocalHost(); JNative getstring = new JNative("libmylib.so", "getstring"); getstring.setRetVal(Type.STRING); ...
jnative包用于调用dll动态库,目前(2011-12-20)最新版本为1.4RC2,官方正式版本文档为1.3,详见官方地址: http://jnative.free.fr/docs/ 这是最新的帮助文档HTML离线包,希望对大家有帮助 Packages org.xvolks....
在提供的文件列表中,我们可以看到两个与JNative.jar相关的本地库文件:JNativeCpp.dll(Windows平台)和libJNativeCpp.so(Linux平台)。这两个文件是JNative库的本地实现部分,分别对应于Windows和Linux操作系统。...
**JNative API说明文档** ...通过深入理解和熟练使用JNative API,开发者可以解决特定场景下的性能问题,提升应用程序的效率。而Javadoc作为API文档,是开发者学习和使用JNative不可或缺的参考资料。
1. **设置环境**:确保Java项目包含JNative的库文件,Windows下需要设置系统路径以包含JNativeCpp.dll,Linux下则需确保libJNativeCpp.so在可执行文件的搜索路径中。 2. **编写Java代码**:在Java类中声明本地方法...
《Jnative资源包源码详解》 Jnative是一款强大的...理解并熟练运用Jnative,不仅可以提升开发效率,还能解决Java在特定场景下的局限性。通过对Jnative源码的学习,开发者可以深入掌握JNI原理,提升自己的编程能力。
**JNATIVE应用详解** Java Native Interface(JNI)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都扮演着关键角色,比如当需要访问操作系统底层功能,如硬件设备控制、图形...
在软件开发中,有时我们需要在Java应用程序中调用本地系统库,例如Windows平台下的动态链接库(DLL)。为了实现这一目标,Java提供了一个名为JNative的库,它允许Java代码与C/C++编写的本地代码进行交互,从而扩展了...
在Java程序中调用DLL(动态链接库)文件通常是通过JNI(Java Native Interface)来实现的,而JNative是JNI的一个封装库,它提供了一种更简洁的方式来调用C/C++编写的本地代码。这篇博客文章可能介绍了如何利用...
在IT行业中,这样的组合通常用于实现Java应用与原生系统资源的紧密集成,例如调用操作系统底层功能或者加速计算密集型任务。 首先,我们来详细了解一下JNative.jar。这是一个Java类库,它提供了Java应用程序调用...
TestJNative_Eclipse.rar 为MyEclipse工程 JNativeTest_VC.rar为VC ...主要写了一些JNative调用DLL的例子,包含了JNative回调函数的用法与指针的用法,以供参考,希望对使用JNative的开发人员有帮助 有问题大家一起讨论
此时,我们通常需要借助于本地代码,也就是C、C++编写的动态链接库(DLL,Windows下)或共享库(Linux下)。JNative是一个Java库,它为Java程序员提供了一种直接调用这些本地代码的能力,无需通过JNI(Java Native ...
5. **跨平台性**:作为Java库,jNative应该能在任何支持Java的平台上运行,包括Windows、Linux、Mac OS等。 6. **使用场景**:jNative适合于那些需要高性能处理大量文本或二进制数据的Java应用,比如大数据分析、...
在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,开发者可以充分利用C++的高性能和灵活性,解决Java在某些场景下性能不足的问题,例如图形处理、游戏开发、科学计算等。同时,由于Java的跨平台特性,JNative也支持在多种操作系统上运行,使得应用具有...
jnative使用方法总结jnative使用方法总结jnative使用方法总结