Java 程序可以“一次编写,到处运行”,原因是它运行在 Ja va 虚拟机上。
正是由于这个原因,它的执行效率也会相应打些折扣,特别是一些与操作系统连接比较紧密的操作。
所以 Java 也提供了本地接口,以便直接调用其它更高效的程序接口,例如 C 、C ++ 等等。
MinGW 是一个运行在 Windows 平台的 C 、C ++ 编译器,支持 Make 、Gdb 等类似 Linux 环境下 GCC 的功能。
下面演示一下用 MinGW 将 C 程序编译成动态链接库,再使用 Java 的本地方法调用 C 程序中的函数。
1、创建 Java 类文件并声明本地接口
package testnative; //未定义包名会调用时会出现 java.lang.UnsatisfiedLinkError
public class CheckFile {
static {// 动态库名称为 test.dll
System.loadLibrary("test");
}
// 本地方法名称
public native void printHello();
public static void main(String[] args) {
try {// 测试运行
new CheckFile().printHello();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、根据 CheckFile 自动生成 C ++ 头文件 testnative_CheckFile.h
> javah -classpath . -jni testnative.CheckFile
3、根据头文件 testnative_CheckFile.h 编写 C ++ 程序
#include "CheckFile.h"
#include <iostream>
using namespace std;
JNIEXPORT void JNICALL Java_testnative_CheckFile_printHello (JNIEnv *e, jobject o) {
cout << "hello" << endl;
}
4、编译 C ++ 程序为动态链接库 test.dll
注意 JDK 的路径
> g++ -ID:\tools\jdk1.6.0_16\include -ID:\tools\jdk1.6.0_16\include\win32 -fPIC -Wall -g -c CheckFile.cpp
生成 CheckFile.o 文件后,再生成动态链接库 test.dll
> g++ -shared -Wl,--kill-at -o test.dll CheckFile.o
5、测试执行
> java -Djava.library.path=. -cp . testnative.CheckFile
分享到:
相关推荐
总结来说,OpenSSL 1.0.1e通过MinGW编译静态库是一项重要的工程实践,它使得开发者能够在Windows环境下创建不依赖外部库的独立程序,但同时也需要注意静态库的优缺点,根据项目需求来选择合适的链接方式。
在软件开发过程中,经常会出现不同编译环境下的库文件(如DLL)需要被另一个环境调用的情况。本文将详细介绍如何在MinGW环境中调用由Microsoft Visual C++ (MSVC) 编译器生成的DLL。 #### 知识点概览 1. **MinGW与...
Java通过JNI调用Eclipse、MinGW编译C++出来的dll,仅仅是一个简单的示例,关键是整个流程要走通,详细参见:http://blog.csdn.net/yanzi1225627/article/details/18891613
内容概要: 1. python通过ctypes调用C DLL库,传递结构体,保存信息 2. 解析xls表格数据,调用C接口,将信息写入到文件 3. mingw编译C DLL库用例 适用人群:python+C程序员 使用场景及目标:开发 其它说明:无
4. 配置编译选项:使用configure脚本来配置编译过程,根据需求选择生成动态库还是静态库。例如,通过`./configure --enable-shared --enable-static`来同时生成两者。 5. 编译与链接:运行`make`命令开始编译过程,...
在 Win32 环境下,如 Mingw(Minimalist GNU for Windows)这样的 GCC 编译工具链,我们可以编译 OpenSSL 的动态库(DLL)和静态库(LIB)。 动态库(DLL)是可被多个程序同时使用的代码库,而静态库(LIB)则会将...
在本文中,我们将深入探讨如何在Windows环境下使用Qt与MinGW编译Point Cloud Library (PCL) 及其依赖库,包括boost、eigen、flann、qhull和VTK。这一过程对于开发者来说至关重要,因为能够确保在Qt环境中直接运行PCL...
标题"libevent-2.0.22-stable在windows环境下使用mingw编译"指的是一个关于使用MinGW编译工具在Windows操作系统上构建libevent库的2.0.22稳定版本的过程。libevent是一个开源的、跨平台的事件通知库,它提供了一种...
在Windows环境下,使用MinGW(Minimalist GNU for Windows)编译FFmpeg是一个常见的任务,尤其对于开发者来说,自定义编译可以实现特定的功能需求或优化性能。本篇将详细讲解如何进行FFmpeg的初级和中级编译过程。 ...
开发者在自己的项目中链接这个静态库后,Zlib的功能将被集成到最终生成的可执行文件中,不需要运行时依赖额外的动态库文件。 在实际使用中,开发者可以通过以下步骤来集成和使用这个Zlib库: 1. **配置编译器**:...
Mingw编译的OpenSceneGraph(OSG)库是一个针对Windows平台优化的开源图形库,适用于3D图形渲染和交互。OSG库以其强大的功能、灵活性和高效性能在游戏开发、虚拟现实、科学可视化等领域广泛应用。这个压缩包提供的...
MingW编译后的libjpeg-9a是一个针对Windows平台的开源JPEG库,它包含了用于处理JPEG(Joint Photographic Experts Group)图像格式的静态库和动态库。libjpeg是一个广泛使用的库,它允许开发者在C/C++程序中进行JPEG...
### mingw编译osg插件 #### 背景与目的 在图形渲染领域,OpenSceneGraph(简称OSG)是一款强大的跨平台图形框架,它支持多种数据格式和丰富的渲染特性,广泛应用于游戏开发、虚拟现实、科学可视化等多个领域。然而...
标题提及的是“QTMinGW下已经编译好的gdal库”,这意味着我们无需从源代码编译GDAL,而是可以直接使用预编译的库文件,这极大地简化了开发流程。MinGW(Minimalist GNU for Windows)是GCC(GNU Compiler Collection...
标题中的“cryptopp840 Windows mingw 编译可用”指的是一个关于Cryptopp库的特定版本840,在Windows操作系统环境下,使用MinGW编译器成功编译并可供使用的资源。Cryptopp是一个C++类库,提供了各种加密算法和密码学...
MingW编译的OpenCV库是为在Windows环境下使用QT+OpenCV开发提供的一种解决方案。MingW是一个开源的GNU工具集,它允许在Windows操作系统上进行类似GCC的编译环境,而OpenCV则是一个强大的计算机视觉库,广泛应用于...
1. **lib** 目录:包含了编译生成的静态库文件(.a)和动态库文件(.dll.a)。这些库文件是程序在运行时链接和使用libxml2功能所必需的。 2. **bin** 目录:通常存放可执行文件和动态链接库(.dll)。这里的动态...
本文将详细介绍如何在Visual Studio 2022(VS2022)环境下,利用MinGW编译GRPC库,包括Debug和Release版本,并生成对应的头文件以及protoc编译器。 首先,确保你已经安装了以下组件: 1. Visual Studio 2022:下载...
MinGW是一个为Windows平台提供开源GCC(GNU Compiler Collection)编译器的项目,使得开发者可以在Windows环境下使用类似于Linux的命令行工具来编译C、C++等语言的程序。 TIFF(Tagged Image File Format)是一种...
本压缩包中的动态库是在Qt 5.9.0环境下编译的,这是Qt的一个稳定版本,提供了丰富的API和强大的功能。开发环境为Windows 10操作系统,这是一个广泛使用的桌面操作系统,支持各种开发工具和平台。 **编译器选项** 1...