转自:http://veikr.com/201207/windows_gcc_jni.html

1、安装MinGW,这个可以为windows提供gcc编译环境。

http://sourceforge.net/projects/mingw/files/ 下载,是.exe的,在线安装,但很快。安装时选c compiler就行了,也可以把c++的也装了。安装完成后,为了方便使用最好配置一下环境变量。把MinGW/bin目录加入环境变量。

2、编写JAVA文件。

写个最简单的:

1
2
3
4
5
6
7
8
9
10
11
12
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

要实现的就是这个方法了。

1
2
3
4
5
6
7
#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  防止编译后的函数名被自动加上@符号,并取消警告。(是小写字母L,不是数字1)

好了,java Test看结果吧。

【转载】在windows下使用gcc编译jni的简单教程的更多相关文章

  1. windows下用GCC编译DLL

    此程序有3个文件,分别为 export.h .export.c .main.c export.h 文件内容 /*此头很有必要,别人在调用的时候知道有哪些方法*/ #ifdef BUILD_DLL #d ...

  2. 【转载】Windows下VSCode编译调试c/c++

    懒得自己配置或自己配置出现不明问题的朋友可以点这里: [VSCode]Windows下VSCode便携式c/c++环境 http://blog.csdn.net/c_duoduo/article/de ...

  3. windows下用vs2010编译ffmpeg

    转载自;http://q1q2q3q4q5q6ln.blog.163.com/blog/static/500794332014666536283/ (注意:请务必先阅读:七,后记补充:) ffmpeg ...

  4. 手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)

    转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言 ...

  5. 【转】Windows下使用VS2008编译OpenCV 2.1 添加Intel TBB和Python支持

    Windows下使用VS2008编译OpenCV2.1 添加Intel TBB和Python支持 步骤: 1.仔细阅读OpenCV官网上的InstallGuide:http://opencv.will ...

  6. Ubuntu下使用gcc编译c文件,未识别cos,sin

    Ubuntu下使用gcc编译c文件,虽然我调用了math.h的头文件,但是未识别cos,sin 报错:( fft.c ) /tmp/ccwXjD8C.o: In function `fft': fft ...

  7. Windows下从源代码编译Skia

    在PPAPI里面画图,能够结合第三方的图形库.比方Cairo.Skia. Google Chrome.Chromium和Android都使用Skia作为画图引擎.我也来试试Skia,先过编译关. fo ...

  8. 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集

    上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...

  9. 在Linux下使用gcc编译mesa文件报undefined reference to symbol 'sin@@GLIBC_2.2.5和DSO missing from command line两个错误的解决方案

    一.概述 在Linux系统下使用gcc编译用C语言写的mesa的示例程序. 环境:Ubuntu Server 18.04.1 二.问题的出现 在Ubuntu下安装好mesa所需的库文件,将目标文件从g ...

随机推荐

  1. PHPstorm主题、插件等相关推荐

    自己想升级PHPstorm,但是一直升级不了,捣腾一下午,终于它over掉了. 重新下载安装,发现应该把自己喜欢的插件.主题配色等记录一下. material theme UI主题插件 不知道为啥,看 ...

  2. sublime text 3安装html-css-js prettify后使用时报错An unhandled OS error was encountered

    我在安装代码格式整理插件 html-css-js prettify 后,在使用时弹出报错提示如下图 意思大概是node.js什么路径没配置对,对于开始下载sublime text 3使用到各种插件的安 ...

  3. SpringBoot的应运而生

    随着动态语言的流行(Ruby,Groovy,Scala,Node.js),java的开发显得格外的笨重,繁多的配置,低下的效率,复杂的部署流程以及第三方技术集成难度大.springboot应运而生,使 ...

  4. C# 索引器的理解和使用

    概述 此部分内容引用自MSDN文档 使用索引器可以用类似于数组的方式为对象建立索引. get 取值函数返回值. set 取值函数分配值. this 关键字用于定义索引器. value 关键字用于定义 ...

  5. asp.net web core 开发问题汇总(1)

    1   ASP.NET Core 设置默认静态起始页 转载地址:ASP.NET Core 设置默认起始页(如default.html) 注:1  默认情况下ASP.NET Core应用程序时不支持静态 ...

  6. linux-redis cluster集群(redis5.x)

    1.查看redis安装目录: [root@iZwz97y9qoykzzotubitq3Z redis-5.0.5]# lltotal 472-rw-rw-r-- 1 root root 106874 ...

  7. vjudge A - 机器人走方格

    原题:https://vjudge.net/problem/51Nod-1118 #include<bits/stdc++.h> using namespace std; ][]; int ...

  8. 树莓派中安装ubuntu及相关设置

    一.下载并烧录系统 首先准备好我们要烧录的ubuntu_meta系统,可以在树莓派官网中下载https://www.raspberrypi.org/downloads/ 这里我们选择 Raspberr ...

  9. 分析器错误消息: Reference.svcmap:未能加载文件

    -------------- 缺少了:System.Web.Razor.dll

  10. Nginx防止DDOS流量攻击

    DDOS流量攻击:频繁的发送请求,造成宽带占用,其他客户端无法访问                Nginx解决DDOS流量攻击,利用limit_req_zone限制请求次数    limit_con ...