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

Android NDK12b:clang与gcc使用独立工具链和相同的构建脚本生成的不同ELF,android,c++,c,android-ndk,ndk-build,Android,C++,C,Android Ndk,Ndk Build,我们的产品包含多个源程序包。一些源程序包是使用autotool/conf构建的 根据google所说的切换到clang作为NDK的默认编译器(从NDK-13开始),我们在*.mk文件以及我们的env设置和构建脚本中继续切换。不允许在更改的位置生成文件 我们使用的是旧的NDK-10d,所以我们切换到NDK-12b。我们还根据Android文档的建议,从中生成了一个独立的工具链,以简化我们的构建脚本并跨所有应用程序进行标准化 我面临的问题是本机代码一加载就在启动时崩溃。我注意到logcat中有一个关

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

根据google所说的切换到clang作为NDK的默认编译器(从NDK-13开始),我们在*.mk文件以及我们的env设置和构建脚本中继续切换。不允许在更改的位置生成文件

我们使用的是旧的NDK-10d,所以我们切换到NDK-12b。我们还根据Android文档的建议,从中生成了一个独立的工具链,以简化我们的构建脚本并跨所有应用程序进行标准化

我面临的问题是本机代码一加载就在启动时崩溃。我注意到logcat中有一个关于未使用的DT条目的警告:
0x6ffffe
VERNEED)和
0x6fffffff
VERNEEDNUM

然后,在tid 22246中出现可怕的:
A/libc:Fatal signal 11(SIGSEGV),代码1,fault addr 0x30

堆栈跟踪告诉我非常非常少:

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中的数据,可以看出arm-linux-AndroidABI-gcc-4.9版本生成的二进制文件中没有这两个DT条目

如果有任何想法、建议……任何事情……都将不胜感激,因为我已经被困(脸红)3天了


谢谢。

您需要调查您的
未使用的DT条目的问题。如果您正在使用您的库将内容输送到其他地方,则每次运行时都会出现该警告,并会危及您的管道接收垃圾,或危及您的应用程序接收excpetions。请看一看我的帖子。

如果您显示了两个版本的
readelf-d
输出的差异,这会有所帮助。。。