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遇到的所有错误,希望对大家有帮助,也方便下次搭建的 ...
随机推荐
- 进化计算简介和遗传算法的实现--AForge.NET框架的使用(六)
原文:进化计算简介和遗传算法的实现--AForge.NET框架的使用(六) 开学了,各种忙起来了… 上一篇介绍了AForge.NET在人工神经网络上的一点点使用,但是老觉不过瘾.matlab用着实在不 ...
- nginx对比haproxy 的反向代理
-bash-4.1# ip add | grep inet inet 172.17.0.7/16 scope global eth0 inet6 fe80::42:acff:fe11:7/64 sco ...
- 【转】C语言文件操作解析(三)
原文网址:http://www.cnblogs.com/dolphin0520/archive/2011/10/07/2200454.html C语言文件操作解析(三) 在前面已经讨论了文件打开操作, ...
- 重温Java的类加载机制
原文地址:http://blog.csdn.net/hitxueliang/article/details/19992851 首先简要的说一下类加载器 我们知道,虚拟机的指令存储在以.class为 ...
- C++中的基类和派生类
转载自:http://www.cnblogs.com/sujz/archive/2011/05/12/2044365.html 派生类的继承方式总结: 继承方式 说明 public 基类的public ...
- C++与lua交互
项目开发的脚本层用的是Lua,引擎用的是C++.但是经理不给开放引擎层的代码.刚好最近项目空闲,安排了学习C++跟Lua的通信. 一.C++与Lua数据交互 数据交互主要是通过C API来实现 首先, ...
- java笔记4之比较运算符
/* 比较运算符: ==,!=,>,>=,<,<= 特点: 无论你的操作是简单还是复杂,结果是boolean类型. ...
- JS截取字符串方法
function textSubstr(str,sub_length){ str = str.trim(); var temp1 = str.replace(/[^\x00-\xff]/g," ...
- javascript中子类如何继承父类
参考阮一峰的文章:http://javascript.ruanyifeng.com/oop/inheritance.html#toc4 function Shape() { this.x = 0; t ...
- 内嵌cuzySDK的App——礼物购已登陆App store
内嵌cuzySDK的App——礼物购已登陆App store.每天为你搜罗特别的礼物,可分类挑选礼物,直接连接淘宝购买,做最贴心的小清新礼物助手,欢迎各位亲朋好友去下载体验.@cuzySDK @re ...