- 浏览: 227666 次
- 性别:
- 来自: 镇江
文章分类
最新评论
-
Luozii:
安卓8.0的system.img死活解不开。http://s ...
yaffs文件打包解包工具 -
不是流氓兔:
不用设置代理了,现在官网有中文站了 http://www.my ...
myeclipse官方网站打不开解决办法 -
nicekwell:
MNC也有3位的,但我国都是2位
IMSI , MCC MNC 的概念 -
hxy1000:
android里没有模态,不过有的对话框效果类似于模态
android 模态与非模态对话框实现 -
lyx0206331:
...
window adb 安装以及usb驱动
jni HelloWorld实例
1.编写一个HelloWorld.java
2.编译javac HelloWorld.java
3.生成头文件javah -jni HelloWorld
4.编写HelloWord.c文件
5.编译C程序
gcc -shared HelloWorld.c -I/home/archermind/jdk1.6.0_22/include -I/home/archermind/jdk1.6.0_22/include/linux -o libHelloWorld.so
7.执行java HelloWorld
死都会报下面的错(如果用IDE就不会有问题)
Exception in thread "main" java.lang.UnsatisfiedLinkError: displayHelloWorld
at HelloWorld.displayHelloWorld(Native Method)
at HelloWorld.main(HelloWorld.java:9)
使用dll export view查看生成的HelloWorld.dll文件发现生成的方法名为Java_HelloWorld_displayHelloWorld@8
使用下面的语句搞定,通过-Djava.library.path=.把当前路径中的so库添加到library路径中
java -Djava.library.path=. HelloWorld
附常见问题
1.
archermind@rdjdz11025:~/jnitest$ gcc HelloWorld.c -o libHelloWorld.so
HelloWorld.c:1:16: error: jni.h: No such file or directory
In file included from HelloWorld.c:3:
HelloWorld.h:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
HelloWorld.c:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
原因:没找到jni.h添加-I/home/archermind/jdk1.6.0_22/include -I/home/archermind/jdk1.6.0_22/include/linux到编译路径中来
可以用以下命令gcc HelloWorld.c -I/home/archermind/jdk1.6.0_22/include -I/home/archermind/jdk1.6.0_22/include/linux -o libHelloWorld.so
2.
archermind@rdjdz11025:~/jnitest$ gcc HelloWorld.c -I/home/archermind/jdk1.6.0_22/include -I/home/archermind/jdk1.6.0_22/include/linux -o libHelloWorld.so
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 0 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 1 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 4 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 5 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 6 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 7 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 8 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 9 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 10 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 11 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 12 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 13 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 14 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 15 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 16 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 17 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 18 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 19 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 20 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 21 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 22 has invalid symbol index 22
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
原因:这就是因为我们没有编写main函数而产生的错误,可以用以下命令编译修复
gcc -shared HelloWorld.c -I/home/archermind/jdk1.6.0_22/include -I/home/archermind/jdk1.6.0_22/include/linux -o libHelloWorld.so
若仍使用原命令编译,则需要在HelloWorld.c添加main函数
int main(){
return 0;
}
3
archermind@rdjdz11025:~/jnitest$ java -Djava.library.path=. HelloWorld
.
Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/archermind/jnitest/libHelloWorld.so: /home/archermind/jnitest/libHelloWorld.so: cannot dynamically load executable
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at HelloWorld.<clinit>(HelloWorld.java:11)
Could not find the main class: HelloWorld. Program will exit.
原因:出现此问题是因为在出现第2个问题的时候,通过添加main函数解决,而没有在编译的时候添加-shared选项,用以下命令编译时即可解决
gcc -shared HelloWorld.c -I/home/archermind/jdk1.6.0_22/include -I/home/archermind/jdk1.6.0_22/include/linux -o libHelloWorld.so
3
F:\studyInfo\jni>gcc -IC:\Java\jdk1.5.0_09\include -IC:\Java\jdk1.5.0_09\include\win32 -O3 -Wall -c -fmessage-length=0 -oHelloWorld.o HelloWorld.c
HelloWorld.c:14:2: warning: no newline at end of file
原因:在最后面加个回车
1.编写一个HelloWorld.java
class HelloWorld{ public native void print(); public static void main(String args[]){ new HelloWorld().print(); } static{ System.out.println(System.getProperty("java.library.path")); System.loadLibrary("HelloWorld"); } }
2.编译javac HelloWorld.java
3.生成头文件javah -jni HelloWorld
4.编写HelloWord.c文件
#include<jni.h> #include<stdio.h> #include"HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *env, jobject obj){ printf("HelloWorld!\n"); return; }; int main(){ return 0; }
5.编译C程序
gcc -shared HelloWorld.c -I/home/archermind/jdk1.6.0_22/include -I/home/archermind/jdk1.6.0_22/include/linux -o libHelloWorld.so
7.执行java HelloWorld
死都会报下面的错(如果用IDE就不会有问题)
Exception in thread "main" java.lang.UnsatisfiedLinkError: displayHelloWorld
at HelloWorld.displayHelloWorld(Native Method)
at HelloWorld.main(HelloWorld.java:9)
使用dll export view查看生成的HelloWorld.dll文件发现生成的方法名为Java_HelloWorld_displayHelloWorld@8
使用下面的语句搞定,通过-Djava.library.path=.把当前路径中的so库添加到library路径中
java -Djava.library.path=. HelloWorld
附常见问题
1.
archermind@rdjdz11025:~/jnitest$ gcc HelloWorld.c -o libHelloWorld.so
HelloWorld.c:1:16: error: jni.h: No such file or directory
In file included from HelloWorld.c:3:
HelloWorld.h:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
HelloWorld.c:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
原因:没找到jni.h添加-I/home/archermind/jdk1.6.0_22/include -I/home/archermind/jdk1.6.0_22/include/linux到编译路径中来
可以用以下命令gcc HelloWorld.c -I/home/archermind/jdk1.6.0_22/include -I/home/archermind/jdk1.6.0_22/include/linux -o libHelloWorld.so
2.
archermind@rdjdz11025:~/jnitest$ gcc HelloWorld.c -I/home/archermind/jdk1.6.0_22/include -I/home/archermind/jdk1.6.0_22/include/linux -o libHelloWorld.so
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 0 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 1 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 4 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 5 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 6 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 7 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 8 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 9 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 10 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 11 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 12 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 13 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 14 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 15 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 16 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 17 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 18 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 19 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 20 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 21 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 22 has invalid symbol index 22
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
原因:这就是因为我们没有编写main函数而产生的错误,可以用以下命令编译修复
gcc -shared HelloWorld.c -I/home/archermind/jdk1.6.0_22/include -I/home/archermind/jdk1.6.0_22/include/linux -o libHelloWorld.so
若仍使用原命令编译,则需要在HelloWorld.c添加main函数
int main(){
return 0;
}
3
archermind@rdjdz11025:~/jnitest$ java -Djava.library.path=. HelloWorld
.
Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/archermind/jnitest/libHelloWorld.so: /home/archermind/jnitest/libHelloWorld.so: cannot dynamically load executable
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at HelloWorld.<clinit>(HelloWorld.java:11)
Could not find the main class: HelloWorld. Program will exit.
原因:出现此问题是因为在出现第2个问题的时候,通过添加main函数解决,而没有在编译的时候添加-shared选项,用以下命令编译时即可解决
gcc -shared HelloWorld.c -I/home/archermind/jdk1.6.0_22/include -I/home/archermind/jdk1.6.0_22/include/linux -o libHelloWorld.so
3
F:\studyInfo\jni>gcc -IC:\Java\jdk1.5.0_09\include -IC:\Java\jdk1.5.0_09\include\win32 -O3 -Wall -c -fmessage-length=0 -oHelloWorld.o HelloWorld.c
HelloWorld.c:14:2: warning: no newline at end of file
原因:在最后面加个回车
- hellojni.rar (3.1 KB)
- 下载次数: 17
发表评论
-
Java 理论与实践: 正确使用 Volatile 变量
2014-11-05 17:58 678转自http://www.ibm.com/developerw ... -
linux andorid apk 反编译
2012-11-19 22:02 1458反编译apk 代码 1.下载dex2jar 反编译源码 jdg ... -
window adb 安装以及usb驱动
2012-06-27 22:32 52751.在windows下安装adb 将附件解压,system3 ... -
andorid animation
2012-05-27 11:37 1713animation 在android 系统中,是一种帧动画,前 ... -
vim 添加中文文档帮助
2012-04-07 18:38 2240(整理于网络) vim中文文档的主页是: http://vi ... -
Failure [INSTALL_FAILED_OLDER_SDK]
2012-04-07 15:11 148541.安装文件与运行环境的skd不匹配 打开源码目录下的And ... -
ubuntu wine 安装source insight
2012-03-04 20:33 46701 sudo apt-get install wine 下载s ... -
yaffs文件打包解包工具
2012-03-03 18:35 13482Yaffs(Yet Another Flash File Sy ... -
android 模态与非模态对话框实现
2012-02-29 23:31 196761.模态对话框是指对话框不消失,不能对其他页面进行操作,也就是 ... -
链接手机设备安装apk或其他操作no permission解决方法
2012-02-26 21:11 1289如题 依次执行以下命令 sudo su adb kil ... -
java source Attacher 1.2
2012-02-26 21:00 1273转自 http://www.oschina.net/news ... -
android intent命名规范
2011-12-10 23:39 1292ACTION_MAIN android:name=&quo ... -
touch mode
2011-12-10 23:34 1719touch mode 是用户在交互过程中的一种视图模式。当用户 ... -
获取当前task的topactivity
2011-09-22 19:10 4537获取当前task的activity方法 ActivityM ... -
android intent 常用用法
2011-08-22 22:45 936转自 http://www.cnblogs.com/lil ... -
Android.mk 基础
2011-08-22 22:43 1056(转自 http://www.cnblogs.com/lila ... -
设置android编码格式与包的引入格式于源码一致
2011-07-17 20:44 2110andorid源码编码格式以及引入包规则 在源码根目录---d ... -
关于设置activity样式
2011-07-08 16:09 2439在android中设置activity的样式时有两种方法 1. ... -
ubuntu apk反编译
2011-07-05 10:41 1492ubuntu系统下反编译apk 1. 下载dex2jar 并 ... -
IMSI , MCC MNC 的概念
2011-07-01 11:16 9866TelephonyManager telManager ...
相关推荐
入门jni最详细清晰地文档,一步步全面的讲解,小学生学会都不成问题,文中还有实例的代码
这是一个Android Studio的jni编程入门实例,配置方式简单易懂,本人有相应的博客说明,欢迎交流。
jni快速入门实例,java文件里写了几个函数,参数包含了常用的数据类型、类、数组等。对应的有C的实现和C++的实现,并且两者混编在一起,生成一个so。有Makefile。基本上涵盖了jni开发用到的基本技术。原创资源。
android studio 中 进行 JNI 开发的一个简单实例,入门demo
这篇文章是对jni的简单测试,使用该测试可以迅速的入门jni
一个JNI入门的使用实例 android 的应用程序(Dalvik VM)中使用JNI(Java Native Interface)调用C/C++开发的共享库
androidJNI初始入门基础案例 androidJNI操作指南
JNI的入门开发,其中包含我个人的理解和实例,肯定对大家有帮助、 很好的学习例子
java调用VC++编写的动态链接库dll,文档中写了三个例子,①简单的入门小例子 ②java传整型数给dll,返回整型数,③java传两个整型数,返回整型数组,每个例子都有详细的说明,帮助初学者理解JNI的使用流程和原理!...
JNI是java调用C++程序的一种实现方法,网上有一些相关的资料,但不一定能适用,这个文档我在学习JNI时综合网上资料总结的,本人亲测能够实现,希望下载的网友有什么问题多多反馈,希望对学习JNI的朋友有所帮助
非常简单易懂的android JNI开发入门级别demo,适合初学者
1:Android通过JNI调用驱动程序(完全解析实例) 2:Android驱动开发入门及手机案例开发分析.pdf 3:android_hal.pdf 4:Android通过JNI调用驱动程序(完全解析实例)
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
android ndk 开发入门小例子。 博客地址http://blog.csdn.net/u014702653/article/details/51861013
7.12.6 减少opengl es/jni方法的调用 7.12.7 绑定顶点的概念 7.12.8 写在结束之前 7.13 小结 第8章 2d游戏编程技巧 8.1 写在开始 8.2 向量 8.2.1 使用向量 8.2.2 一点三角学的知识 8.2.3 实现一个...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
作为入门级选手,2D游戏显然更适合上手一些,另外适合果果这个年龄段的幼教类的游戏也多以2D游戏居多。3D游戏本身也太难了,不仅要 Programming能力,还要3D建模能力,这些学习起来周期就太长了;一直是Ubuntu Fans...
巧,android_jni操作指南,Android_NDK开发实例,Android_RIL层剖析(官方翻译),Android2.2+API+中文文档系列,Android的 Message机制(简单小结). Android的主题和风格介绍,Android开发环境搭建,Android内存泄露调试,...