android ndk开发支持64位时遇到undefined reference to `__system_property_get'
android 做守护进程时用ndk实现,但是打包执行文件时要支持android5.1以上的64位手机时遇到undefined reference to `__system_property_get',打包不成功,最后百度谷歌找到http://www.bubuko.com/infodetail-1014879.html这篇文章看到问题原因和解决方案,原文原因:
下面这一系列的函数在arm64的头文件有定义,但是在libc.so中却找不到实现。
header: sys/system_properties.h
__system_property_get
__system_property_set
__system_property_find
__system_property_read
__system_property_find_nth
__system_property_foreach
编译64位的arm平台的库的时候报了一个这样的链接错误,__system_property_get是Android NDK提供的一个函数,32位上一直都是ok的,编译64的时候既然会报这个错误,readelf查看64位的libc.so确实找不到这个符号
原文解决办法:
找到一台arm平台的Android 5.1的设备或虚拟机,把/system/lib64/libc.so取出替换NDK里面的库即可
但是具体解决时还是遇到一点需要注意的问题:你要打64位的so库,那么你的ndk环境得是ndk-r10以上64位的,具体下载地址(http://download.csdn.net/detail/guangzhen87/8500163),然后你要打支持arm64的so就去找一台arm平台的Android 5.1的设备或虚拟机,把/system/lib64/libc.so取出(复制不需要root权限哈,下个es文件浏览器就看得到了)替换ndk目录下面的platforms文件夹里面数字最大的android库的arm64文件夹最里面lib目录下libc.so(比如我的d:\android-ndk-r10d-windows-x86_64\platforms\D:\Tools\android-ndk-r10d-windows-x86_64\platforms\android-21\arch-arm64\usr\lib\libc.so),然后你要支持x86_64,mips64平台,找到对应版本的机子里面libc.so文件做相应的替换编译就ok了!
这是我找到的libc.so的,arm64的哦,不要搞错了http://download.csdn.net/detail/luoyong123456/9418548
更多相关文章
- android 应用在SD卡创建应用的文件夹
- Android各国语言缩写以及各国语言Values文件夹命名规则
- Kotlin Multiplatform - 下一代全平台开发技术
- android studio --terminal 命令编译项目(仅限于ubuntu平台)
- 高通8x25平台display模块总结
- Android SDK Manager在添加Platforms和其他Packages时提示无法在
- Android 资源文件夹下的文件不能有大写字符,会导致R.java无法生成
- Android系统平台progurad混淆功能使能
- 图解MyEclipse 8.5M1中Android开发平台的搭建【下】