java+ jni + mingw

参考网址:

http://wenku.baidu.com/link?url=9aQ88d2ieO7IgKLlNhJi5d3mb3xwzbezLPzSIX3ixz4_j56LLrv9dvkhO3d2VkWR9x9OpD-JPh0SmzxOn1PdoG8MLwPSYjO3kywFLO9b5bS

测试jni程序

http://blog.163.com/ct2007_km/blog/static/8550514220123273392591/

http://www.cnblogs.com/youxilua/archive/2011/09/16/2178554.html

安装Mingw

http://wenku.baidu.com/link?url=Tvq8Y0kZuGV8QJ5B7ihyq8sdYtaHaDoY4wHIyXmDGGRnEJnE6vsPwgrRRC4pYCQk5kbj1wSmwFgfcUbUL8tILoUBTIbVy2ZNoZjIkW5B-ES

第一步 安装JAVA

1.1    到Oracle的官网可以下载JDK安装包,安装好后,需要正确配置环境变量。

 

1.2    JAVA环境变量设置

 

在环境变量中添加下面的变量

PATH

%JAVA_HOME%\bin

JAVA_HOME

D:\ProgramFiles\Java\jdk1.6.0_10

CLASSPATH

.;%JAVA_HOME%\lib;%JAVA_HOME%\bin.

1.3 测试Java配置是否成功

运行java, javac, java -vesion

如果没有出错,说明配置成功

1.4测试代码Java

简单的hellworld代码

public class main{

  // 程序的入口

  public static void main(String args[]){

    // 向控制台输出信息

    System.out.println("欢迎java01班的同学");

  }

}

cmd窗口执行:

Javac main.java

Java main

之前在测试后面的代码,出现一堆问题,找了半天居然是Java环境变量配置没有成功,运行java, javac, java –vesion都显示没有问题,Eclipse下面也可以正常编译Java代码,浪费了不少时间。

第二步 安装MinGw

2.1 百度或者Google可以下载MinGw安装

2.2配置MinGw环境变量。

在安装过程中自动设置好,在cmd中输入gcc测试一下,假如显示gcc: no input file ,则安装已成功。否则,自己把c:/mingw/bin的目录手动加到环境变量中,方法如下:

1.右键“我的电脑”==>属性==>“高级”==>“环境变量”

2.在用户变量中,假如有path变量,就选择“编辑”,在原先值后面加个分号,在把MinGW的bin目录加上就好了。假如没有path就自己“新建”一个,再把MinGW的bin目录加上。

3.测试方法同上,over

2.3 MinGW进行编译和创建一个终端应用程序

下面是一个简单的c语言程序的代码示例,

hello.c的文件中试试看:

#include <stdio.h>

int main(int argc, char **argv)

{

printf ("Hello\n");

return (0);

}

Cmd窗口:

gcc  –o hello hello.c

hello

第三步 本地测试

3.1 编写Java程序

MyJni.java

public class MyJni {

   //使用JNI的关键字native

   //这个关键字决定我们那些方法能在我们的C文件中使用

   //只须声明,不必实现

    public native void display();

    public native double sum(double x,double y);

   //这个是到时候调用我们写好的C文件

   //现在用不上

   static {

    System.loadLibrary("MyJni");

    }

   public static void main(String[] args) {

       //到时候测试用方法现在用不上

       new MyJni().display();

       System.out.println(new MyJni().sum(2.0, 3.0));

    }

}

编译 javacMyJni.java生成MyJni.class文件



3.2 由class文件生成头文件



javah -classpath . -jni MyJni

3.3 编写本地的c代码

MyJni.c

//必须的头文件jni.h

#include <jni.h>

//导入我们需要实现的本地方法

#include "MyJni.h"

#include <stdio.h>

JNIEXPORT void JNICALL Java_MyJni_display

 (JNIEnv *env, jobject obj)

{

   printf("Hello World tom!!");

   return;

}

JNIEXPORT jdouble JNICALL Java_MyJni_sum

 (JNIEnv *env, jobject obj, jdouble a, jdouble b)

{

   return a + b;

}

3.4 编译c代码

gcc -shared -Wl,--kill-at –o MyJni.dll MyJni.c

3.5 运行 java MyJni

Hello World tom!! 5.0

java + jni + mingw实例开发(基于命令行窗口模式)的更多相关文章

  1. 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏

    也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...

  2. JNI 在命令行窗口输入字符,不显所输入字符,显指定的掩饰符

    //JNI-命令行窗口输入字符,显掩饰符.txt /*  目标:在命令行窗口输入字符,不显所输入字符,显指定的掩饰符  作者:tangshancheng@21cn.com*/ 1.KeyBoard.j ...

  3. 如何创建一个基于命令行工具的跨平台的 NuGet 工具包

    命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...

  4. Linux下基于命令行的抓包方法

    大家可能都已经对著名的抓包工具Ethereal比较熟悉了,这里再介绍一种基于命令行的抓包工具tcpdump. 举例:抓本机1813端口上的数据,并将抓包结果保存在test.cap文件中 然后在本地可以 ...

  5. Java基础系列(30)- 命令行传参

    命令行传参 有时候你希望运行一个程序的时候再传递给它消息.这就要靠传递命令行参数main()函数实现 package method; public class CommandLine { public ...

  6. POP3:基于命令行的电子邮件(EMail)在线查看和批量下载工具

    使用该工具可以在不安装outlook和foxmail等邮件客户端的情况下快速下载指定邮箱的邮件,并将下载的邮件以eml格式进行保存. 附: 查看eml格式的邮件可使用 EmlReader 工具,该工具 ...

  7. Apache Commons CLI官方文档翻译 —— 快速构建命令行启动模式

    昨天通过几个小程序以及Hangout源码学习了CLI的基本使用,今天就来尝试翻译一下CLI的官方使用手册. 下面将会通过几个部分简单的介绍CLI在应用中的使用场景. 昨天已经联系过几个基本的命令行参数 ...

  8. Appium命令行工作模式

    前面如何快速搭建基于python+appium的自动化测试环境介绍过安装Appium-desktop的客户端版本,然后每次需要运行脚本的时候都要先去找到Appium应用并双击打开,再点击Start S ...

  9. JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码

    JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码 摘要:本文主要记录了在Windows上启动Tomcat后,命令行窗口出现乱码的问题及解决办法. 问题重现 在Windows ...

随机推荐

  1. Isomorphic Strings

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  2. [转]C++中四种类型转换符的总结

    C++中四种类型转换符的总结 一.reinterpret_cast用法:reinpreter_cast<type-id> (expression)    reinterpret_cast操 ...

  3. ios coredata NSManagedObject 的 objectID

    要使用这个属性一定要注意先把数据保存下,不然会变化的!就无法通过 - (NSManagedObject*)existingObjectWithID:(NSManagedObjectID*)object ...

  4. Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)

    Tomcat启动时报如下错误:     java.lang.OutOfMemoryError: PermGen space 解决办法:     配置相关内存大小.其中按照启动tomcat的不同方式,分 ...

  5. docker 初探

    2015-08-14 09:24:42 查看本地已经有的镜像: docker images 启动镜像实例(例centos), 并进入centos命令行提示符 (镜像的一个实例就叫container): ...

  6. POJ 3597 Polygon Division (DP)

    题目链接 题意:把一个正多边形分成数个三角形或者四边形,问有多少种方案. 题解: 如果分出的全为三角形的话,那就是正多边形三角剖分问题.它的结果就是Catalan数.现在也可以划分出四边形的话,可以采 ...

  7. 如何把一个excel工作薄中N个工作表复制到另一个工作薄中

    一般遇到标题这样的情况,许多人可能会一个一个的复制粘贴,其实完全不必那么麻烦. 你可以按以下步骤来操作: 第一步:打开所有要操作的excel工作薄\n 第二步:按住Shift键,选择所有要复制的工作表 ...

  8. iOS 日常工作之常用宏定义大全

    转自:http://www.jianshu.com/p/213b3b96cafe 前言: 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间,又有时候忘记怎么定义了 ...

  9. AFNetworking request failed unacceptable content type text/html

    今天体验AFNetwork 3.1.0 进行数据解析,但是解析数据控制台一直都输出这样的 error 结果: 于是,照着以前AFN2.+版本的进行设置: 结果发现在新版本的 AFN 上不能设置了.既然 ...

  10. 常用邮箱的服务器(SMTP/POP3)地址和端口总结

    163.com: POP3服务器地址:pop.163.com(端口:110) SMTP服务器地址:smtp.163.com(端口:25) 126邮箱: POP3服务器地址:pop.126.com(端口 ...