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