我们的产品包含多个源代码包。一些源码包使用autotool/conf构建。NDK12b:使用独立工具链和相同的构建脚本,使用clang vs gcc生成的不同ELF
根据google关于从NDK-13开始将NDK切换为NDK的默认编译器的说法,我们继续在* .mk文件中开关以及在我们的env设置和构建脚本中。没有使文件更改。
我们使用的是旧的NDK-10d,所以我们切换到NDK-12b。正如Android的文档所建议的那样,我们还从中生成了一个独立的工具链,以简化我们的构建脚本并实现所有标准化。
我遇到的问题是加载本机代码后立即启动。我注意到logcat中关于以下方面的警告:unused DT entry: type 0x6ffffffe
(VERNEED)和0x6fffffff
(VERNEEDNUM)。然后,可怕的:A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x30 in tid 22246
。
堆栈跟踪告诉我非常,非常小:
08-11 15:31:02.421 128-128/? I/DEBUG: #00 pc 00036b8c /system/lib/libc.so
08-11 15:31:02.421 128-128/? I/DEBUG: #01 pc 0003817b /system/lib/libc.so (vfprintf+18)
08-11 15:31:02.421 128-128/? I/DEBUG: #02 pc 00035251 /system/lib/libc.so (fprintf+12)
08-11 15:31:02.421 128-128/? I/DEBUG: #03 pc 000015fd /data/app/com.myapp.demo-1/lib/arm/libappdebug.so (pipe_listen+328)
08-11 15:31:02.421 128-128/? I/DEBUG: #04 pc 0001659b /system/lib/libc.so
08-11 15:31:02.421 128-128/? I/DEBUG: #05 pc 000144c3 /system/lib/libc.so
注意,比较作为倾倒通过readelf -d
所述的ELFs内的数据示出了通过臂Linux的生成中不存在的二进制文件的那些2个DT条目-androideabi-gcc-4.9构建。
任何想法,指针,......任何东西...,将不胜感激因为我一直卡住(脸红)3天现在。
谢谢。
如果您已经显示了两个版本的'readelf -d'的输出差异,那么它会有帮助... – not2qubit