JNI学习&使用过程中的错误
Part 1
Ubuntu下JNI的简单使用:
http://blog.csdn.net/fengqiaoyebo2008/article/details/6210499
Part 2
在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译:
http://www.oschina.net/question/1402563_133543
Part 3
JNI java.lang.UnsatisfiedLinkError解决方法:
http://dikar.iteye.com/blog/382701
JNI java.lang.UnsatisfiedLinkError解决方法:
http://www.360doc.com/content/09/0402/09/107226_2994393.shtml
Java调用本地C/C++动态库拾遗 JNI/JNA与名称粉碎:
http://blog.sina.com.cn/s/blog_3f2c72ea01011kvx.html
JNI调用本地方法 java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()异常:
http://www.cnblogs.com/javawebsoa/archive/2013/07/30/3225942.html
|
生成头文件的shell: hadoop@Node4:/usr/local/eclipse/workspace/MongoLoc/bin$ javah -jni tong.mongo.loction.LinkedC 编 译C程序的shell: g++ -shared -I /usr/local/bin/jdk1.7.0_71/include -I /usr/local/bin/jdk1.7.0_71/include/linux main.cpp -o libSpeedEstimate.so |
0. 错误 :
java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()
解决:
之前在windows系统下运行需要在本地方法的头文件中中的函数前面加上下划线,比如以前是 JNIEXPORT void JNICALL Java_TestNative_Hello (JNIEnv * , jobject ); 现在改成 JNIEXPORT void JNICALL _Java_TestNative_Hello (JNIEnv * , jobject ); 同时你的实现的cpp文件或者c文件里的函数头也要一致 前面有下划线。
但是移植到ubuntu下,出现此错误。去掉加的下划线后又可以运行。
1.错误:
运行程序,在eclipse控制台出现
Java HotSpot(TM) Server VM warning: You have loaded library /usr/local/eclipse/workspace/MongoLoc/libSpeedEstimate.so which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/local/eclipse/workspace/MongoLoc/libSpeedEstimate.so: /usr/local/eclipse/workspace/MongoLoc/libSpeedEstimate.so: 错误 ELF 类: ELFCLASS64 (Possible cause: architecture word width mismatch)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1880)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at tong.mongo.loction.LinkedC.<clinit>(LinkedC.java:10)
at tong.mongo.loction.MdbFind.main(MdbFind.java:173)
原因:
原因是编译使用的jvm是64位的,我们的系统jVM是32位的版本。c程序在64位系统下编译,不能在32位下用。
解决:
c程序重新在32位系统编译
2. 错误:
在命令窗口输入 gcc -shared -I /usr/local/bin/jdk1.7.0_71/include/ -I /usr/local/bin/jdk1.7.0_71/include/linux/ main.cpp -o libSpeedEstimate.so
进行编译
gcc: error trying to exec 'cc1plus': execvp: 没有那个文件或目录
原因:
gcc 跟 g++ 版本不一致,或者没有安装g++
解决:
$sudo apt-get install g++
3. 错误:运行程序出现 libSpeedEstimate.so: undefined symbol: _ZNSt8ios_base4InitC1Ev
Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/local/eclipse/workspace/MongoLoc/libSpeedEstimate.so: /usr/local/eclipse/workspace/MongoLoc/libSpeedEstimate.so: undefined symbol: _ZNSt8ios_base4InitC1Ev
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1880)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at tong.mongo.loction.LinkedC.<clinit>(LinkedC.java:10)
at tong.mongo.loction.MdbFind.main(MdbFind.java:173)
原因:
译有问题,用g++ 编译可以,可能是有个cpp文件,gcc虽然能编译,但是生成的so文件格式有些问题,jni找不到接口,用g++就可以
原来的命令:
gcc -shared -I /usr/local/bin/jdk1.7.0_71/include/ -I /usr/local/bin/jdk1.7.0_71/include/linux/ main.cpp -o libSpeedEstimate.so
修改:
g++ -shared -I /usr/local/bin/jdk1.7.0_71/include/ -I /usr/local/bin/jdk1.7.0_71/include/linux/ main.cpp -o libSpeedEstimate.so
然后重新运行程序
见连接:http://bbs.csdn.net/topics/290013271
JNI学习&使用过程中的错误的更多相关文章
- 学习MySQL过程中的随笔二
MySQL深入学习: 视图 使用视图的目的:多次使用同一张临时表(或者已经存在的表) 视图只是一个虚拟表,其本质为[根据SQL语句获取动态的数据集,并为其命名],用户只需使用别名即可获得实时的 ...
- 【转】SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误
SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误 最近在VS2013上连接远程数据库时,突然连接不上,在跑MSTest下跑的时候,QTAgent32 crash.换成IIS ...
- Sql server2012连接Sql server 2008时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误。(provider:SSL Provider,error:0-接收到的消息异常,或格式不正确。)
以前连接是正常的,就这两天连不上了.(没有耐心的直接看末尾解决办法) 错误消息如下: 1.尝试读取或写入受保护的内存.这通常指示其他内存已损坏.(System.Data) 2.已成功与服务器建立连接, ...
- mysql安装过程中出现错误ERROR 1820 (HY000): You must SET PASSWORD before executing this statement解决
mysql安装过程中出现错误ERROR 1820 (HY000): You must SET PASSWORD before executing this statement解决 最近新装好的my ...
- 为Secure Store Service生成新密钥,解决“生成密钥过程中发现错误”的问题
我们集成TFS和SharePoint Server以后,一个最常见的需求是通过SharePoint Server的Excel Service读取TFS报表中的信息,利用Excel Service的强大 ...
- 关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)
关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录) 作者:王可利(Star·星星) HTML中 相对定位:position:relative; 绝对定位:position ...
- 利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)
利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录) 作者:王可利(Star·星星) 总结: 今天学习的jQ类库的使用,代码重复的比较多需要完善.严格区分大小写,在 $(" ...
- html/css 盒子布局 Margin 、Padding 、border 以及 清除浮动的知识 (学习HTML过程中的小记录)
html/css 盒子布局 Margin .Padding .border 以及 清除浮动的知识 (学习HTML过程中的小记录) 作者:王可利(Star·星星) width 是"宽 ...
- CAS SSO:汇集配置过程中的错误解决方法
本教程为gevin.me原创文章,转载请注明: CAS SSO:配置过程中的错误解决方法 | Gevin’s Blog 本文将收集在配置CAS SSO遇到的所有错误,希望对大家有帮助,也方便下次搭建的 ...
随机推荐
- Shell循环处理
date=`echo $1 | tr -d '-'` date1=`echo $1` date_end=`get_date $2 +1 | sed 's/-//g'` while [ 1 ] do d ...
- [转载]memcached stats 命令
STAT pid 1552 STAT uptime 3792 STAT time 1262517674 STAT version 1.2.6 STAT pointer_size 32 STAT cur ...
- Linux中.a,.la,.o,.so文件的意义和编程实现
Linux中.a,.la,.o,.so文件的意义和编程实现 Linux下文件的类型是不依赖于其后缀名的,但一般来讲: .o,是目标文件,相当于windows中的.obj文件 ...
- Android调用系统相机和文件浏览器
//拍照功能,调用系统的相机功能 Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResul ...
- Codeforces Round #301 (Div. 2) E . Infinite Inversions 树状数组求逆序数
E. Infinite Inversions ...
- 行内人解读开发一个App需要多少钱?
对于很多互联网的创业者来说,评估前期的创业成本是很重要的.在这几年的创业大潮中,伴随着“互联网+”和“互联网思维”的普及,很多创业项目选择了开发app作为创业项目的载体.在我接触到的很多创业者,找Ap ...
- jsp中导入导出excel,ssh框架
导入Excel:jsp中 <form action="user_importTradingMoney" enctype="multipart/form-data&q ...
- css中margin:0 auto没作用
很多初学制作网页的朋友,可能会遇到的一个常见问题,就是在CSS中加了margin:0 auto;却没有效果,不能居中的问题!margin:0 auto;的意思就是:上下边界为0,左右根据宽度自适应!其 ...
- 面向对象CSS (OOCSS)
新版 OOCSS 请关注 http://www.oocss.cc/ 时下流行面向对象,那么有没有可能把样式表也面向对象一下呢,将现在的CSS(Cascading Style Sheets层叠样式表)进 ...
- [Angular 2] Using Array ...spread to enforce Pipe immutability
Pipes need a new reference or else they will not update their output. In this lesson you will use th ...