java + jni + mingw实例开发(基于命令行窗口模式)
java+ jni + mingw
参考网址:
测试jni程序
http://blog.163.com/ct2007_km/blog/static/8550514220123273392591/
http://www.cnblogs.com/youxilua/archive/2011/09/16/2178554.html
安装Mingw
第一步 安装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实例开发(基于命令行窗口模式)的更多相关文章
- 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏
也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...
- JNI 在命令行窗口输入字符,不显所输入字符,显指定的掩饰符
//JNI-命令行窗口输入字符,显掩饰符.txt /* 目标:在命令行窗口输入字符,不显所输入字符,显指定的掩饰符 作者:tangshancheng@21cn.com*/ 1.KeyBoard.j ...
- 如何创建一个基于命令行工具的跨平台的 NuGet 工具包
命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...
- Linux下基于命令行的抓包方法
大家可能都已经对著名的抓包工具Ethereal比较熟悉了,这里再介绍一种基于命令行的抓包工具tcpdump. 举例:抓本机1813端口上的数据,并将抓包结果保存在test.cap文件中 然后在本地可以 ...
- Java基础系列(30)- 命令行传参
命令行传参 有时候你希望运行一个程序的时候再传递给它消息.这就要靠传递命令行参数main()函数实现 package method; public class CommandLine { public ...
- POP3:基于命令行的电子邮件(EMail)在线查看和批量下载工具
使用该工具可以在不安装outlook和foxmail等邮件客户端的情况下快速下载指定邮箱的邮件,并将下载的邮件以eml格式进行保存. 附: 查看eml格式的邮件可使用 EmlReader 工具,该工具 ...
- Apache Commons CLI官方文档翻译 —— 快速构建命令行启动模式
昨天通过几个小程序以及Hangout源码学习了CLI的基本使用,今天就来尝试翻译一下CLI的官方使用手册. 下面将会通过几个部分简单的介绍CLI在应用中的使用场景. 昨天已经联系过几个基本的命令行参数 ...
- Appium命令行工作模式
前面如何快速搭建基于python+appium的自动化测试环境介绍过安装Appium-desktop的客户端版本,然后每次需要运行脚本的时候都要先去找到Appium应用并双击打开,再点击Start S ...
- JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码
JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码 摘要:本文主要记录了在Windows上启动Tomcat后,命令行窗口出现乱码的问题及解决办法. 问题重现 在Windows ...
随机推荐
- c#.net循环将DataGridView中的数据赋值到Excel中,并设置样式
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel ...
- iOS coredata 级联删除
应用场景如下,每个用户可以设定多个提醒,当删除一个用户时,应当把相关的提醒都删除,而删除一个提醒时,应当把提醒从用户信息中删除. 那么 Profile 应该建立一个如下图的relationship 而 ...
- tortoiseSVN svn+ssh
2015年6月28日 11:45:10 星期日 今天实验用小海龟svn客户端的svn+ssh协议去链接版本库, 期望会快一点儿 首先在设置里 记着将连接ssh用的用户名和密码一块儿写到输入框中: -l ...
- ffmpeg-20160806-bin.7z
ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...
- C#集合及特殊字符
集合里面 打印 出来时 要把 集合内的格式转化为其他格式! 壹. 集合 在.add之前 为空 数组 同样 添加元素之前 为 空(下一章超市购物例题具体体现) 1.System Collec ...
- 【leetcode】Copy List with Random Pointer (hard)
A linked list is given such that each node contains an additional random pointer which could point t ...
- 【python】getopt使用
来源:http://blog.chinaunix.net/uid-21566578-id-438233.html 注意对比:[python]argparse模块 作者:limodou版权所有limod ...
- VS2010编译Qt4.8.2的64版本库
安装qt-win-opensource-4.8.2-vs2010.exe(从http://download.qt.io/archive/qt/4.8/4.8.2/下 载),这个是32位的,里面有编译好 ...
- September 16th 2016 Week 38th Friday
All the treasures of the earth would not bring back one lost moment. 机会失去不再来,千贯万贯难赎回. Cherish your h ...
- Mysql 删除语句
手册: 14.2.2 DELETE Syntax 单表删除语句:DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [PARTITION (par ...