cannot locate symbol "srand" referenced by

问题:

使用android-ndk编译android 动态库,编译无问题,运行在低版本Android系统(如:android 4.4.4)报

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "srand" referenced by "name.so"...

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "rand" referenced by "name.so"...

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "strtof" referenced by "name.so"...

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "stderr" referenced by "name.so"...


原因分析:

standalone-toolchain-x86/sysroot/usr/lib/libc.so 与 usr/local/standalone-toolchain-x86/sysroot/usr/include里面头文件定义的函数对应不上,include头文件多定义了,srand,rand,strtof在stdlib.h;stderr在stdio.h中

android-ndk-r14b/platforms/android-14/arch-x86/usr/include/的头文件里面定义的srand、rand等函数才和usr/local/standalone-toolchain-x86/sysroot/usr/lib/libc.so里面实际导出的函数对应的上

另外还有在standalone-toolchain-x86/sysroot/usr/include/android/api-level.h,如果是使用android-ndk-r15c或以上版本生成的,其中__ANDROID_API__的值是10000,导致编译出的离线内核依赖的库实际在对应系统版本中的libc.so中未实现,然后报错


解决办法:

使用android-ndk-r14b版本ndk生成standalone-tool,生成命令: sudo python make_standalone_toolchain.py --arch x86 --api 16 --stl gnustl -v --install-dir /path/standalone-toolchain-x86,然后再编译离线静态库

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容