2016-08-12 47 views
2

我们的产品包含多个源代码包。一些源码包使用autotool/conf构建。NDK12b:使用独立工具链和相同的构建脚本,使用clang vs gcc生成的不同ELF

根据google关于从NDK-13开始将NDK切换为NDK的默认编译器的说法,我们继续在* .mk文件中开关以及在我们的env设置和构建脚本中。没有使文件更改。

我们使用的是旧的NDK-10d,所以我们切换到NDK-12b。正如Android的文档所建议的那样,我们还从中生成了一个独立的工具链,以简化我们的构建脚本并实现所有标准化。

我遇到的问题是加载本机代码后立即启动。我注意到logcat中关于以下方面的警告:unused DT entry: type 0x6ffffffeVERNEED)和0x6fffffffVERNEEDNUM)。然后,可怕的: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天现在。

谢谢。

+0

如果您已经显示了两个版本的'readelf -d'的输出差异,那么它会有帮助... – not2qubit

回答

0

你需要看看你的问题unused DT entry。如果您正在使用自己的图书馆将资料传播到其他地方,那么每次运行时都会出现此警告,并危及您的管道接收垃圾,或者您的应用会收到警报。请看看我的帖子here

相关问题