本站首页    管理页面    写新日志    退出                   长夜慢慢兮,心越来越远!


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31

最新日志

删除Windows的服务
下载日本新闻的脚本
怎样快速得到一批手机号码的归宿地
快速生成随机密码
python 命令行小技巧
maven dbunit 常用命令一览
MinGW-GCC 如何编译JNI程序
Oracle数据库导入数据方法之一
MinGW-GCC 如何编写win32应
如何为应用程序创建图标

最近的评论

回复:GCC静态链接与动态链接
回复:怎样快速得到一批手机号码的归宿地
回复:MinGW-GCC 如何编译JNI
回复:GCC静态链接与动态链接
回复:MinGW-GCC 如何编译JNI
回复:GCC静态链接与动态链接
回复:GCC静态链接与动态链接
回复:GCC静态链接与动态链接
回复:GCC静态链接与动态链接

连接





[JAVA]MinGW-GCC 如何编译JNI程序
冥思者 发表于 2006/3/22 13:44:16

本文并非介绍如何编写JNI程序,相关资料可以参考java tutorial。这里只是简单示范如何用MinGW-GCC去编译JNI程序。第一步:编写java程序public class HelloWorld {    public native void displayHelloWorld();    static {        System.loadLibrary("hello");    }    public static void main(String[] args) throws Exception {        new HelloWorld().displayHelloWorld();    }}注意其中的代码     public native void displayHelloWorld();     就是声明displayHelloWorld()这个方法是本地方法,需要在jni中实现。     static {         System.loadLibrary("hello");     }     意思是载入库文件,意味着我们下面的jni程序最终需要打包成hello.dll第二步:编译java程序javac HelloWorld.java第三步:生成头文件javah -jni HelloWorld第四步:编写本地实现代码我们打开第三步生成的HelloWorld.h这个文件,找到其中的方法声明JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld  (JNIEnv *, jobject);这是jni的命名规范,具体可以参考java tutorial。这里只是方法声明,现在我们来实现它。/*  HelloWorldImp.c  */#include <jni.h>#include "HelloWorld.h"#include <stdio.h>JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) {    printf("Hello world!\n");    return;}第五步:创建库文件前面第一步里面提到过hello.dll,这里利用以前提到的制作动态库的命令来生成它。gcc -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 -shared -o hello.dll HelloWorldImp.c运行java HelloWorld不好,出错了Exception in thread "main" java.lang.UnsatisfiedLinkError: displayHelloWorld        at HelloWorld.displayHelloWorld(Native Method)        at HelloWorld.main(HelloWorld.java:9)意思是库文件已经成功载入了,但是没有找到相匹配的displayHelloWorld这个方法。可是我们明明实现了这个方法的呀?原来程序在调用动态库的时候,没有我们想象中的那么简单,而且不同的编译器做法不一样,windows版java中调用jni遵从的是vc的调用方式,和我们用的MinGW GCC默认格式不一致。我们需要调整一下参数,(注意其中的--kill-at)gcc -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 -shared -Wl,--kill-at -o hello.dll HelloWorldImp.c运行 java HelloWorldHello world! 运行成功,great!

阅读全文(8773) | 回复(2) | 编辑 | 精华


回复:MinGW-GCC 如何编译JNI程序
书树(游客)发表评论于2007/10/24 21:15:30

太感谢了。我弄了两三个小时,还是你这里解决了我的问题,其实也怀疑到是gcc和vc不一致的原因,只是这方面资料太少。 so, thanks for you

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除


回复:MinGW-GCC 如何编译JNI程序
haha(游客)发表评论于2007/5/16 14:36:32

谢谢你,我也是同样的问题,找了好久,不知道原因,哈哈

» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



公告

暂无公告...

专题

首页(13)
SHELL(1)
随笔(1)
C/C++(4)
JAVA(1)
果米箱(2)
PYTHON(4)

留言

签写新留言

主公的东西写的很好怎么不写了?我会常常来

统计

blog名称:长夜慢慢兮,心越来越远!
日志总数:13
评论数量:48
留言数量:1
访问次数:154047
建立时间:2006年3月3日

 

 

 


站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144758150 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号