1、安装MinGW,这个可以为windows提供gcc编译环境。
到http://sourceforge.net/projects/mingw/files/ 下载,是.exe的,在线安装,但很快。安装时选c compiler就行了,也可以把c++的也装了。安装完成后,为了方便使用最好配置一下环境变量。把MinGW/bin目录加入环境变量。
2、编写JAVA文件。
写个最简单的:
public class Test
{
static
{
System.loadLibrary("lib");
}
static native void print(int a);
public static void main (String args[])
{
print(3);
}
}
然后编译java文件 javac Test.java
3、生成.h头文件。
javah Test
就这一个简单的命令就行了。(如果有包名,需要类似javah com.google.Test这样,注意命令行目录)
4、实现.c文件。
.h生成后可以打开看一下,里面有个方法是需要自己实现的。如下:
JNIEXPORT void JNICALL Java_Test_print
(JNIEnv *, jclass, jint);
这个就是我们java里写的print方法了。
这里简单说一下c的方法名命名规则是Java_packagename_Classname_method
要实现的就是这个方法了。
#include <stdio.h>
#include <jni.h>
#include "Test.h"
JNIEXPORT void JNICALL Java_Test_print(JNIEnv *env, jclass jthiz,jint a)
{
printf("Hello JNI!%d\n",a);
}
这里简单说一下,include的第一个是c的标准输入输出库,第2个是jni库,这个文件是在java/include里的,第3个就是自己刚才生成的头文件了,注意一定要用“”,不是用<>
方法的前2个参数是固定的,不用管。
5、把.c文件编译成.dll
命令:
gcc -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 -shared -Wl,–kill-at -s -o lib.dll Test.c
解释一下:
-I(大写字母I,include的意思)是加入自己的库,也就是告诉编译器jni.h的位置。当然不加这个参数也可以,自己把jni.h和jni_md.h文件复制出来和Test.c放一起,另外include改为”"
-shared表示编译成.dll库文件
-s参数可以大幅减小.dll文件的大小,不加也可以
-o表示目标文件名,不加也可以,会有默认名,但要自己改成java中导入库的名字,这里是lib
-Wl,–kill-at 这个参数我也不明白,反正要加,不加能编译成.dll,但java中会报错。(是小写字母L,不是数字1)
好了,java Test看结果吧。
Tags: gcc, java, jni, mingw, 教程
Categories: Java
转自:http://veikr.com/201207/windows_gcc_jni.html
分享到:
相关推荐
使用gcc和g++编译jni指令太长,很麻烦。所以做了一个编译工具JNIBuilder.jar。 因为是用于jni的,所以默认使用者的电脑上已经安装好Java和MinGW,并且可用。 并提供一个测试例程。功能是jni函数调用java函数弹出一个...
在本教程中,我们将深入探讨如何在Cygwin环境下使用GCC和Makefile来编译动态链接库(DLL),以便让Java应用程序能够调用这些本地函数。这个过程涉及到JNI(Java Native Interface),它允许Java代码与用其他编程语言...
以上就是在Mac下使用JNI编译代码的详细过程,希望能对你在Java与C/C++交互开发中提供帮助。在实际操作中,可能会遇到各种问题,如路径设置、权限问题等,但遵循这些基本步骤,大部分情况都能得到解决。
在使用GCC 4.4.0编译JNI代码前,确保已经安装了Java JDK,并配置好环境变量`JAVA_HOME`。GCC 4.4.0是较老的版本,但仍然足够支持JNI的编译。首先,你需要创建一个`HelloWorld`的Java类,声明一个本地方法: ```java...
在本主题中,我们将深入探讨如何在Windows和Linux环境中利用JNI来生成动态链接库(DLL for Windows,SO for Linux),并使Java能够调用C++编写的函数。 1. **Java调用C++的基本原理** - JNI为Java应用程序提供了一...
- 使用GCC或者其他C编译器,结合JNI库(通常在Java SDK的`lib`目录下)编译C源码,生成.so动态链接库。 4. **Java端加载库**: - 在Java代码中,使用`System.loadLibrary("library_name")`加载.so库。 - 现在,...
相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多...
#### 二、编译生成Windows下的DLL ##### 1. 编译DLL的基本步骤 通过Cygwin-GCC可以很方便地编译生成Windows系统下可以调用的动态链接库(.dll)。具体操作如下: - **编译源文件为对象文件**:首先需要将C/C++源...
5. **C/C++编译器**: 例如Windows下的Visual C++或Unix/Linux下的GCC/CC。 #### 三、从Java程序调用C/C++代码的步骤 从Java程序调用C/C++代码的过程分为六个步骤: 1. **编写Java代码**: 在Java类中声明将要调用...
本文将详细介绍如何使用JNI技术实现简单的“Hello World”程序,以此帮助初学者理解JNI的基本工作机制。 #### 二、JNI适用场景 JNI通常用于以下几种情况: 1. **功能补足**:当标准Java类库未能提供所需功能,...
MinGW(Minimalist GNU for Windows)是一个开源的Windows上的GNU工具集,提供了GCC(GNU Compiler Collection)等编译器,用于编译C/C++代码。首先,你需要访问MinGW官网下载并安装最新版本的MinGW,包括gcc-c++...
本篇文章将详细解释如何在Windows环境下配置JNI编译环境。 首先,我们需要准备以下组件: 1. Java Development Kit (JDK):Java编程的基础,提供编译Java源码和运行Java应用所需的工具。 2. Android Native ...
- 编译和链接:使用C/C++编译器(如GCC)编译源代码,并链接到Java运行时库。 3. **JNI关键概念**: - `JNIEnv`指针:这是JNI的核心,它是一个指向一组函数指针的结构体,提供了访问Java对象和执行Java操作的接口...
通过这个简单的JNI示例,我们可以看到在Windows环境下,如何利用Android SDK和NDK进行本地代码的开发。理解并熟练运用JNI,不仅可以提升Android应用的性能,还能帮助开发者充分利用现有C/C++库,为复杂功能的实现...
- 在 Linux 上,可以使用 GCC 进行编译。 2. **构建 Java 项目**: - 使用 Maven 或 Gradle 等工具来管理项目的依赖关系。 - 确保编译后的动态链接库路径被正确配置。 3. **运行 Java 应用**: - 确认 Java ...
通过以上步骤,开发者能够在Windows环境下使用Eclipse和NDK进行原生代码的开发和调试。hello-jni是一个基本的示例,用于演示如何在Android应用中调用本地C/C++代码,通常包括JNI头文件的生成、本地方法的声明和实现...
在 Windows 环境下使用 Eclipse 开发 Android 应用时,如果需要利用 C 或 C++ 的功能,通常会涉及到 Android NDK 的使用。为了更好地整合开发流程,可以将 Cygwin 和 Eclipse 结合起来使用,实现更加高效的开发体验...
使用合适的编译器(如GCC或Clang),将C/C++源文件编译为动态链接库(.so文件,Linux下为.so,Windows下为.dll,Android为.so)。确保链接时包含JNI库(-ljnijava)。 6. **加载本地库** 在Java代码中,使用`...