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

NDK12b: Different ELF produced by clang vs gcc using the standalone toolchain and the same build scripts

本文关键字:构建 脚本 ELF 工具 gcc clang NDK12b 独立      更新时间:2023-10-16

我们的产品包含多个源代码包。有些源包是使用autotool/conf构建的。

基于google所说的从NDK-13开始切换到clang作为NDK的默认编译器,我们继续在*。Mk文件以及我们的环境设置和构建脚本。No make files where changed.

我们使用的是旧的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转储的elf中的数据显示,arm-linux-androideabi-gcc-4.9构建生成的二进制文件中没有这两个DT条目。

任何想法,指针,…任何事情……我已经被困(脸红)3天了

谢谢。

您需要调查您的unused DT entry的问题。如果你使用你的库在其他地方管道东西,这个警告会在每次运行时出现,并危及你的管道接收垃圾,或者你的应用程序接收异常。