本文参考自:http://blog.csdn.net/kongqz/article/details/4028012
我下载了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)
相关推荐
3. libJNativeCpp.so:这是Unix-like系统下的动态链接库,与JNativeCpp.dll类似,提供JNative在Linux、AIX或HP-UX等系统上与C++库交互的能力。 通过这些文件,开发者可以在Java应用程序中利用JNative库,无论是...
`jnative`是一个开源的Java库,它允许Java程序直接调用C和C++编写的动态链接库,从而扩展了Java的功能。它通过JNI(Java Native Interface)来实现这一目标,JNI是Java平台标准的一部分,为Java应用程序提供了与本地...
在Java程序中调用DLL(动态链接库)文件通常是通过JNI(Java Native Interface)来实现的,而JNative是JNI的一个封装库,它提供了一种更简洁的方式来调用C/C++编写的本地代码。这篇博客文章可能介绍了如何利用...
4. **编译本地代码**:将C/C++源文件编译为动态链接库(如.dll on Windows,.so on Linux,.dylib on macOS)。 5. **加载库并调用方法**:在Java代码的静态块中,使用`System.loadLibrary`加载本地库,然后就可以...
当Java程序通过JNative调用本地函数时,JNative.jar会与这个动态链接库协作,完成从Java到C++的调用过程。在Windows系统中,动态链接库允许程序在运行时加载所需的功能,而不是在编译时就绑定到特定的函数实现,这...
这两个文件是JNative库的本地实现部分,它们分别对应Windows和Linux下的动态链接库。当Java程序运行时,JNative.jar会加载对应的本地库,通过JNI桥接,实现Java与本地代码的交互。这意味着JNative不仅支持Windows...
然后,使用C/C++编译器编译本地代码,生成动态链接库(如.dll文件在Windows上,.so文件在Linux上)。 3. **创建本地方法** - **声明本地方法**:在Java类中,使用`native`关键字声明本地方法,但不提供实现。 - *...
而JNativeCpp.dll是Windows平台下的动态链接库,libJNativeCpp.so则是Linux平台下的动态链接库,它们实现了这些Java接口,提供了实际的本地功能。 JNI是Java平台的标准部分,允许Java代码与其他语言编写的代码进行...
其次,JNativeCpp.dll是一个动态链接库,它是针对Windows平台的原生代码实现部分。在Windows操作系统上,DLL文件被用来包含可由多个程序同时使用的函数和资源。JNativeCpp.dll很可能包含了实际的C++实现,这些实现...
`org.xvolks.jnative`是一个Java库,主要目标是简化Java程序与本地库(如动态链接库DLL或共享对象SO)的交互。它通过封装JNI接口,提供了友好的API,使得Java程序员无需直接接触复杂的JNI语法,即可实现跨语言调用。...
3. **编写本地方法实现**:使用JNI规范创建对应的C/C++头文件和实现文件,然后编译成动态链接库(DLL或SO)。 4. **加载本地库**:在Java代码中使用`System.loadLibrary()`加载本地库。 5. **调用本地方法**:在...
3. **链接本地库**:将本地方法的实现编译成动态链接库(Windows上的`.dll`,Linux上的`.so`,MacOS上的`.dylib`)。然后在Java代码中使用`System.loadLibrary`加载这个库。 4. **Java代码调用本地方法**:在Java类...
在Java编程领域,有时我们需要调用本地动态链接库(DLL)来利用C++或C编写的特定功能,这通常涉及到JNI(Java Native Interface)。然而,JNI的学习曲线较陡峭,配置过程复杂,对于初学者和开发团队来说可能是一项...
通过使用JNative组件,开发者可以更加高效地在Java程序中调用C/C++动态链接库,极大地简化了跨语言调用的过程。尽管JNative目前仍处于Beta阶段,但它已经展现出了极大的潜力和易用性,是Java开发人员值得尝试的一个...
通过上述步骤,我们成功地使用JNative在Java中调用了C/C++的动态链接库。这种方式不仅简化了开发过程,还提高了程序的性能。对于需要调用C/C++库的Java开发者来说,JNative提供了一个简洁而有效的解决方案。
4. **编译本地代码**:将C/C++代码编译为动态链接库(Windows上的.dll,Linux上的.so,Mac上的.dylib)。 5. **加载动态库**:在Java的静态初始化块中,使用`System.loadLibrary`加载本地库,如`System.loadLibrary...
`JNative-1.3.2`是一个开源组件,专门设计用于帮助Java应用程序调用Windows平台上的DLL(动态链接库)文件,同时也支持Linux平台下的SO(共享对象)文件。下面我们将详细介绍这个组件的使用方法、工作原理及相关知识...
3. **动态链接库编译**:将实现本地方法的C/C++源代码编译成动态链接库(Windows上的.dll,Linux上的.so,Mac OS X上的.dylib)。 4. **加载和注册**:在Java代码中,使用`System.loadLibrary`加载动态链接库,并在...
在Java编程环境中,有时我们需要利用已经存在的C++或者C库(通常以.dll文件形式存在于Windows系统,.so文件在Linux系统)来扩展功能或解决特定问题。Java本身并不支持直接调用dll,但通过一些技术手段可以实现。本文...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统API,无需编写C语言的动态链接库(DLL)或使用Java的本机接口(JNI)。JNA通过提供一种高级映射,使得Java程序员能够轻松地访问...