NDK12b:clang vs gcc使用独立工具链和相同的构建脚本生成的不同ELF

时间:2016-08-12 00:26:26

标签: android c++ c android-ndk ndk-build

我们的产品包含多个源包。一些源包是使用autotool / conf。

构建的

基于谷歌所说的从NDK-13开始切换到作为NDK的默认编译器的clang,我们继续在* .mk文件以及我们的env设置和构建脚本中切换。没有make文件在哪里更改。

我们使用的是旧的NDK-10d,所以我们改用了NDK-12b。我们还根据Android的文档推荐了一个独立的工具链,以简化我们的构建脚本并实现所有标准化。

我面临的问题是一旦加载本机代码就会在启动时崩溃。我注意到的是logcat中有关unused DT entry: type 0x6ffffffe已退出)和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转储的ELF中的数据进行比较表明, arm-linux-androideabi-gcc-4.9 构建的二进制文件中缺少这两个DT条目。

任何想法,指示,......任何事情......都会非常感激,因为我已经被羞辱了3天了。

感谢。

1 个答案:

答案 0 :(得分:0)

您需要调查unused DT entry的问题。如果您正在使用您的库来管理其他地方的内容,则会在每次运行时显示该警告并危及您的管道接收垃圾,或者您的应用程序接收激活。请查看我的帖子here