`

在windows下使用gcc编译jni的简单教程

 
阅读更多
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
分享到:
评论

相关推荐

    编译JNI的gcc指令代打和测试例程

    使用gcc和g++编译jni指令太长,很麻烦。所以做了一个编译工具JNIBuilder.jar。 因为是用于jni的,所以默认使用者的电脑上已经安装好Java和MinGW,并且可用。 并提供一个测试例程。功能是jni函数调用java函数弹出一个...

    gcc makeFile入门(三)JNI.rar

    在本教程中,我们将深入探讨如何在Cygwin环境下使用GCC和Makefile来编译动态链接库(DLL),以便让Java应用程序能够调用这些本地函数。这个过程涉及到JNI(Java Native Interface),它允许Java代码与用其他编程语言...

    mac 下jni编译代码

    以上就是在Mac下使用JNI编译代码的详细过程,希望能对你在Java与C/C++交互开发中提供帮助。在实际操作中,可能会遇到各种问题,如路径设置、权限问题等,但遵循这些基本步骤,大部分情况都能得到解决。

    JNI笔记(GCC4.4.0编译器)

    在使用GCC 4.4.0编译JNI代码前,确保已经安装了Java JDK,并配置好环境变量`JAVA_HOME`。GCC 4.4.0是较老的版本,但仍然足够支持JNI的编译。首先,你需要创建一个`HelloWorld`的Java类,声明一个本地方法: ```java...

    在windows中jni(生成dll)Linux中jni(生成so),java调用曾c++

    在本主题中,我们将深入探讨如何在Windows和Linux环境中利用JNI来生成动态链接库(DLL for Windows,SO for Linux),并使Java能够调用C++编写的函数。 1. **Java调用C++的基本原理** - JNI为Java应用程序提供了一...

    linux-java调用c语言编译的so动态库-jni例子-简单计算器

    - 使用GCC或者其他C编译器,结合JNI库(通常在Java SDK的`lib`目录下)编译C源码,生成.so动态链接库。 4. **Java端加载库**: - 在Java代码中,使用`System.loadLibrary("library_name")`加载.so库。 - 现在,...

    在Linux环境下使用GCC编译Java调用上期技术CTP-API的JNI(C++)源码.zip

    相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多...

    cygwin可以编译生成windows下供调用的dll

    #### 二、编译生成Windows下的DLL ##### 1. 编译DLL的基本步骤 通过Cygwin-GCC可以很方便地编译生成Windows系统下可以调用的动态链接库(.dll)。具体操作如下: - **编译源文件为对象文件**:首先需要将C/C++源...

    JAVA下JNI编程教程

    5. **C/C++编译器**: 例如Windows下的Visual C++或Unix/Linux下的GCC/CC。 #### 三、从Java程序调用C/C++代码的步骤 从Java程序调用C/C++代码的过程分为六个步骤: 1. **编写Java代码**: 在Java类中声明将要调用...

    JNI入门教程之HelloWorld篇(详细版).doc

    本文将详细介绍如何使用JNI技术实现简单的“Hello World”程序,以此帮助初学者理解JNI的基本工作机制。 #### 二、JNI适用场景 JNI通常用于以下几种情况: 1. **功能补足**:当标准Java类库未能提供所需功能,...

    简洁使用 eclipse+mingw 环境编译 java jni

    MinGW(Minimalist GNU for Windows)是一个开源的Windows上的GNU工具集,提供了GCC(GNU Compiler Collection)等编译器,用于编译C/C++代码。首先,你需要访问MinGW官网下载并安装最新版本的MinGW,包括gcc-c++...

    JNI编译环境配置

    本篇文章将详细解释如何在Windows环境下配置JNI编译环境。 首先,我们需要准备以下组件: 1. Java Development Kit (JDK):Java编程的基础,提供编译Java源码和运行Java应用所需的工具。 2. Android Native ...

    java jni教程

    - 编译和链接:使用C/C++编译器(如GCC)编译源代码,并链接到Java运行时库。 3. **JNI关键概念**: - `JNIEnv`指针:这是JNI的核心,它是一个指向一组函数指针的结构体,提供了访问Java对象和执行Java操作的接口...

    android jni(demo) 基于windows平台

    通过这个简单的JNI示例,我们可以看到在Windows环境下,如何利用Android SDK和NDK进行本地代码的开发。理解并熟练运用JNI,不仅可以提升Android应用的性能,还能帮助开发者充分利用现有C/C++库,为复杂功能的实现...

    Java JNI调用动态库(Linux、Windows)的实现步骤

    - 在 Linux 上,可以使用 GCC 进行编译。 2. **构建 Java 项目**: - 使用 Maven 或 Gradle 等工具来管理项目的依赖关系。 - 确保编译后的动态链接库路径被正确配置。 3. **运行 Java 应用**: - 确认 Java ...

    配置NDK集成eclipse使用hello-jni实例

    通过以上步骤,开发者能够在Windows环境下使用Eclipse和NDK进行原生代码的开发和调试。hello-jni是一个基本的示例,用于演示如何在Android应用中调用本地C/C++代码,通常包括JNI头文件的生成、本地方法的声明和实现...

    windows下eclipse集成cygwin编译android_NDK

    在 Windows 环境下使用 Eclipse 开发 Android 应用时,如果需要利用 C 或 C++ 的功能,通常会涉及到 Android NDK 的使用。为了更好地整合开发流程,可以将 Cygwin 和 Eclipse 结合起来使用,实现更加高效的开发体验...

    JNI简单实例

    使用合适的编译器(如GCC或Clang),将C/C++源文件编译为动态链接库(.so文件,Linux下为.so,Windows下为.dll,Android为.so)。确保链接时包含JNI库(-ljnijava)。 6. **加载本地库** 在Java代码中,使用`...

Global site tag (gtag.js) - Google Analytics