解决jni链接时找不到函数的问题
用jni调用库函数时,经常会碰到link的错误,具体出错信息如下:
08-07 01:42:06.490: E/AndroidRuntime(1665): java.lang.UnsatisfiedLinkError: xxxx
核对后发现函数名称并没有错。
这个问题有几种可能,最根本的解决方法是把so的内容dump出来。具体的方法可以参考 http://stackoverflow.com/questions/34732/how-do-i-list-the-symbols-in-a-so-file
我的文件是elf格式,执行如下的命令:
readelf -Ws xxxx.so >> test.log
so这个库导出的函数就在test.log里了,你可以在log找找看,如果没发现你要导出的函数,
大概有两种可能,第一个是JNIEXPORT没起到作用,第二个是你的函数名或者路径由错误。
附上我的test.log
Symbol table '.dynsym' contains 79 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000fa8 0 SECTION LOCAL DEFAULT 7
2: 0000aaa0 0 SECTION LOCAL DEFAULT 15
3: 00002278 36 FUNC GLOBAL DEFAULT 7 ___Unwind_ForcedUnwind
4: 00001c7c 164 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_RaiseException
5: 00000000 0 FUNC GLOBAL DEFAULT UND ioctl
6: 00000fdd 60 FUNC GLOBAL DEFAULT 7 Java_com_android_ralmes_GlobalProcess_read
7: 00001065 56 FUNC GLOBAL DEFAULT 7 Java_com_android_ralmes_GlobalProcess_isGpioTriggerDeviceExist
8: 00001019 76 FUNC GLOBAL DEFAULT 7 Java_com_android_ralmes_GlobalProcess_write
9: 00002134 0 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Save_VFP
10: 00002254 36 FUNC GLOBAL DEFAULT 7 _Unwind_Resume_or_Rethrow
11: 0000293c 0 NOTYPE GLOBAL DEFAULT ABS __exidx_end
12: 00000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard
13: 000017d4 8 FUNC GLOBAL DEFAULT 7 __aeabi_unwind_cpp_pr0
14: 00002360 44 FUNC GLOBAL DEFAULT 7 _Unwind_GetRegionStart
15: 00002254 36 FUNC GLOBAL DEFAULT 7 ___Unwind_Resume_or_Rethrow
16: 0000aab0 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__
17: 0000229c 36 FUNC GLOBAL DEFAULT 7 _Unwind_Backtrace
18: 00000000 0 NOTYPE WEAK DEFAULT UND __cxa_begin_cleanup
19: 00002118 20 FUNC GLOBAL DEFAULT 7 __restore_core_regs
20: 00002154 0 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Save_VFP_D_16_to_31
21: 00000000 0 NOTYPE WEAK DEFAULT UND __cxa_call_unexpected
22: 00001304 8 FUNC GLOBAL DEFAULT 7 _Unwind_GetCFA
23: 00000000 0 FUNC GLOBAL DEFAULT UND memcpy
24: 000012a0 76 FUNC GLOBAL DEFAULT 7 _Unwind_VRS_Set
25: 00000000 0 FUNC GLOBAL DEFAULT UND __cxa_finalize
26: 0000a944 0 NOTYPE GLOBAL DEFAULT 12 __FINI_ARRAY__
27: 000011f1 100 FUNC GLOBAL DEFAULT 7 Java_com_android_ralmes_GlobalProcess_openGpioM0
28: 0000aaa0 0 NOTYPE GLOBAL DEFAULT ABS __bss_start__
29: 00001a18 212 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Backtrace
30: 0000aaa0 4 OBJECT GLOBAL DEFAULT 15 __dso_handle
31: 00002144 0 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Save_VFP_D
32: 00000000 0 FUNC GLOBAL DEFAULT UND __android_log_print
33: 00001dac 876 FUNC GLOBAL DEFAULT 7 _Unwind_VRS_Pop
34: 000017c4 8 FUNC WEAK DEFAULT 7 __aeabi_unwind_cpp_pr2
35: 0000229c 36 FUNC GLOBAL DEFAULT 7 ___Unwind_Backtrace
36: 0000285c 0 NOTYPE GLOBAL DEFAULT ABS __exidx_start
37: 0000220c 36 FUNC GLOBAL DEFAULT 7 ___Unwind_RaiseException
38: 00000000 0 FUNC GLOBAL DEFAULT UND abort
39: 00002230 36 FUNC GLOBAL DEFAULT 7 ___Unwind_Resume
40: 00000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail
41: 00000fb9 36 FUNC GLOBAL DEFAULT 7 _Z43Java_com_android_ralems_GlobalProcess_closeP7_JNIEnvP7_jclassi
42: 0000215c 0 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Restore_WMMXD
43: 00001189 104 FUNC GLOBAL DEFAULT 7 Java_com_android_ralmes_GlobalProcess_closeGpioM0
44: 00000000 0 FUNC GLOBAL DEFAULT UND write
45: 0000212c 0 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Restore_VFP
46: 00002230 36 FUNC GLOBAL DEFAULT 7 _Unwind_Resume
47: 00001310 32 FUNC GLOBAL DEFAULT 7 _Unwind_DeleteException
48: 0000130c 4 FUNC GLOBAL DEFAULT 7 _Unwind_Complete
49: 0000aab0 0 NOTYPE GLOBAL DEFAULT ABS __bss_end__
50: 0000109d 236 FUNC GLOBAL DEFAULT 7 Java_com_android_ralmes_GlobalProcess_openSerialPort
51: 0000a93c 0 NOTYPE GLOBAL DEFAULT 11 __INIT_ARRAY__
52: 00000000 0 FUNC GLOBAL DEFAULT UND read
53: 0000238c 888 FUNC GLOBAL DEFAULT 7 __gnu_unwind_execute
54: 0000213c 0 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Restore_VFP_D
55: 00000000 0 NOTYPE WEAK DEFAULT UND __cxa_type_match
56: 00001d40 108 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Resume
57: 0000214c 0 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Restore_VFP_D_16_to_31
58: 0000220c 36 FUNC GLOBAL DEFAULT 7 _Unwind_RaiseException
59: 0000aaa0 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
60: 0000aab0 0 NOTYPE GLOBAL DEFAULT ABS __end__
61: 00001c08 28 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_ForcedUnwind
62: 00001d20 32 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Resume_or_Rethrow
63: 00000000 0 FUNC WEAK DEFAULT UND __gnu_Unwind_Find_exidx
64: 00002118 20 FUNC GLOBAL DEFAULT 7 restore_core_regs
65: 000021f8 0 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Save_WMMXC
66: 00002318 8 FUNC GLOBAL DEFAULT 7 _Unwind_GetTextRelBase
67: 00002328 56 FUNC GLOBAL DEFAULT 7 _Unwind_GetLanguageSpecificData
68: 00001254 76 FUNC GLOBAL DEFAULT 7 _Unwind_VRS_Get
69: 000021e4 0 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Restore_WMMXC
70: 00002704 64 FUNC GLOBAL DEFAULT 7 __gnu_unwind_frame
71: 00002278 36 FUNC GLOBAL DEFAULT 7 _Unwind_ForcedUnwind
72: 0000aaa0 0 NOTYPE GLOBAL DEFAULT ABS _edata
73: 0000aab0 0 NOTYPE GLOBAL DEFAULT ABS _end
74: 000021a0 0 FUNC GLOBAL DEFAULT 7 __gnu_Unwind_Save_WMMXD
75: 000017cc 8 FUNC WEAK DEFAULT 7 __aeabi_unwind_cpp_pr1
76: 00000000 0 FUNC GLOBAL DEFAULT UND open
77: 00002320 8 FUNC GLOBAL DEFAULT 7 _Unwind_GetDataRelBase
78: 00000000 0 FUNC GLOBAL DEFAULT UND close
我要导出一个叫close的函数,但是第41行的内容如下:
41: 00000fb9 36 FUNC GLOBAL DEFAULT 7 _Z43Java_com_android_ralems_GlobalProcess_closeP7_JNIEnvP7_jclassi
可以看到,导出的函数名不规则,而且ralmes错写成了ralems,
发现问题后立刻就解决了。
解决jni链接时找不到函数的问题的更多相关文章
- ios 引入第三方库 运行时找不到函数实现
今天引入webtrends 这个库,结果一直运行时找不到函数,纳闷了一下午! 后来发现,是other flag没有设置对,对于那些包含category用来扩展ios原始类型的库,链接的时候需要特别的链 ...
- [DNX]解决dnu restore时找不到Newtonsoft.Json的问题
在Mac上用最新版的dnx 1.0.0-beta5-11855进行dnu restore,出现下面的错误: System.IO.FileNotFoundException: Could not loa ...
- ubuntu 下 数学库编译链接时找不到各种数学问题解决方法 can not fon atan 等等
解决参考 http://askubuntu.com/questions/190246/ld-cannot-find-math-library you should use -lm at the end ...
- 解决eclipse配置Tomcat时找不到server选项(Mac通用)
集成Eclipse和Tomcat时找不到server选项: 按照网上的步骤如下: 在Eclipse中,窗口(window)——首选项(preferences)——服务器(Server)——运行时环境( ...
- 解决远程桌面链接时出现"The RPC server is unavailable."或"RPC服务器不可用"的问题
解决远程桌面链接时出现"The RPC server is unavailable."或"RPC服务器不可用"的问题 解决远程桌面链接时出现"The ...
- 解决eclipse配置Tomcat时找不到server选项
集成Eclipse和Tomcat时找不到server选项: 按照网上的步骤如下: 在Eclipse中,窗口(window)——首选项(preferences)——服务器(Server)——运行时环境( ...
- 使用SQL Server 2008远程链接时SQL数据库不成功的解决方法
关键设置: 第一步(SQL2005.SQL2008): 开始-->程序-->Microsoft SQL Server 2008(或2005)-->配置工具-->SQL Serv ...
- 在 root 下执行 Oracle 程序时找不到 libclntsh.so.11.1 错误的解决办法。
在 root 下执行 Oracle 程序时找不到 libclntsh.so.11.1 错误的解决办法. 先确定 libclntsh.so.11.1 所在目录: [oracle@localhost ~] ...
- java:解决eclipse配置Tomcat时找不到server选项
http://blog.csdn.net/wugangsunny/article/details/25246565 集成Eclipse和Tomcat时找不到server选项: 按照网上的步骤如下: 在 ...
随机推荐
- 依赖注入及AOP简述(十三)——AOP应用举例(完结) .
2. AOP应用举例 在一般的应用程序开发中,有一些典型的AOP应用,使得开发者可以专注于业务逻辑本身,而不是与之完全无关的一些“方面”. l 首先就是关于前面介绍过的日志输出类 ...
- JFreeChat
JFreeChart教程(一) 分类: java Component2007-05-31 15:53 39849人阅读 评论(30) 收藏 举报 jfreechartimportdataset图形ap ...
- pagination分页插件
最近做了个项目,有用到分页, 这类插件应该是很常用的, 虽然网上很多现成的分页插件, 但是还是想着自己写一个, 给自己积累点东西, 顺便练练手, 写了差不多3个小时左右, 代码如下: 代码: < ...
- Spire PDF for .NET 在ASP.NET中的使用 ---- 并非那么“美好”,有些挫折!
笔者注:看此文前,请您先看一下上一篇文章吧. 昨天的时候,我测试了一下Spire PDF在WinForm程序中的应用,可以说用起来很简单(请忽略效率问题,没有进行测试).不过在互联网如此发达的今天,适 ...
- Python核心编程读笔 9: 异常
第10章 异常一.异常1 检测和处理异常 (1)try-except语句 try: try_suite #监控这里的异常 except Exception[, reason]: except_suit ...
- http keepalive and tcpkeepalive
http keepalive 减少tcp 连接 (三次握手的消耗) tcp keepalive 检测死链接的 session 在tcp连接中, src_ip + src_port + dest_ip ...
- std::string 字符替换函数
// 替换路径中所有“\”为“/” #include <algorithm> static std::string ConvertSlash(std::string& strUrl ...
- java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception
在使用ajax主题时出现上述错误的解决办法是将form表单中的action属性值改为*.action后就可以解决.至于为什么会这样不太明白.但是修改action的属性值以后就会出现另一个错误即 对应的 ...
- Thinkphp的页面判断
目前在做的系统中,涉及到了前端页面的判断,比如性别在数据库中存储为0或1,而页面显示应该为“男”或“女”,这里就需要用到页面判断. 比如, <volist name="st" ...
- asp.net mvc 注册中的邮箱激活功能实现(二)
邮件发送功能封装 /// <summary> /// 发送注册邮件 /// </summary> /// <param name ...