我们的产品包含多个源包。一些源码包是使用 autotool/conf 构建的。
根据谷歌所说的从 NDK-13 开始将 clang 转换为 NDK 的默认编译器,我们继续在 *.mk 文件以及我们的 env 设置和构建脚本中进行转换。没有更改的 make 文件。
我们使用的是旧的 NDK-10d,因此我们切换到 NDK-12b。我们还根据 Android 文档的建议从中生成了一个独立的工具链,以简化我们的构建脚本并实现所有的标准化。
我面临的问题是加载 native 代码后启动时崩溃。我注意到的是 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 构建生成的二进制文件中缺少这 2 个 DT 条目。
任何想法、指示……任何事情……都将不胜感激,因为我现在已经被困(脸红)3 天了。
谢谢。
最佳答案
您需要检查您的未使用的 DT 条目
的问题。如果您正在使用您的库将内容传输到其他地方,则该警告将在每次运行时出现,并危及您的管道接收垃圾或您的应用程序接收异常。请看我的帖子here .
关于android - NDK12b : Different ELF produced by clang vs gcc using the standalone toolchain and the same build scripts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38908064/