首先 MingGW 会有乱码的问题,是由于它对中文支持不好。
直接删除它就可以显示英文提示信息
%MinGW%\share\locale\zh_CN\LC_MESSAGES
.dll 文件放在工程下,而不是src,或bin下,否则会报错
java.lang.UnsatisfiedLinkError: no hello in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at lily.test.Hello.<clinit>(Hello.java:7)
生成.h头文件的run.bat
要放在bin目录下
set java_home=C:\Program Files\Java\jdk1.6.0_23
set path=%java_home%\bin
set class_path=%java_home%\lib;%java_home%\lib\dt.jar;%java_home%\lib\tools.ja
set classpath=.;%classpath%
javah -jni lily.test.Hello
@pause
亲爱的教我的关于makefile的写法
# 依赖关系的意思是这样的
# all 依赖于 hello.o
# make 会第一个执行 makefile的all(在默认情况下)
# 然后能 他会去找 hello.o
# 发现找不到 hello.o呢,他就去找hello.o的依赖关系
# 然后呢,他发现hello.o依赖于hello.cpp
# 然后呢,他就用hello.o的生成方法去生成 hello.o(生成方法是第二行到最后指定的)
# 明白吧
# 依赖关系的表述方法是
# object: depending object1,depending object2
# 所以呢,网页上面说的Step 1实际上是 hello.o:hello.cpp那步
# step 2 呢是 all 哪一步
# 实际上还应该更复杂
# 你现在明白了么??明白了的话我给你一个更像样的makefile
# 一般 编译选项和编译器是变量明白哇
CC=gcc
LINK_FLAG= #就不详细给出了
DEBUG_LINK_FLAG=-g #通常debug和Release使用不同选项
RELEASE_LINK_FLAG= #-g Release版当然不用-g可以理解不??
# 恩
# 如果没有必要跟新,就是说如果你的hello.dll比 hello.o 和hello.def新,那么make将不对hello.dll更新
# 所以我前面一旦有变化要他从新编译一次就去改一把.cpp因为.cpp一改.o就要重新编译,.o一重新编译,那么.dll也从新build
# 否则他会do nothing
# understand??Y
# OK,自己玩一会吧
# makefile就这点花头,有很多宏,就是细节问题了
# 慢慢积累
all: hello.dll
# 一般还有一个clean
# 如果你不想默认走all
# 你就可以执行make 标号
# 比如现在就叫make clean
# 这个命令基本上已经是标准了,就是把build的乱七八糟的东西删掉
# 制定完之后make是不会走all那个东西的,明白瓦????Y
# 好就这么多,让我run一下
clean:
del *.o
del *.dll
hello.dll: hello.o hello.def
$(CC) -shared -o hello.dll hello.o hello.def
#第一行表示依赖关系
#第二行表示编译方法
#第二行第一个字符是tab
#不能写成空格
#知道吧
hello.o: hello.cpp
$(CC) -c -o hello.o hello.cpp
http://blog.csdn.net/believefym/article/details/1644635
http://www.blogjava.net/orangewhy/archive/2007/05/24/119645.aspx