Android Dev Notes - 27- 关于JNI 编译

首先 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值