我们的产品包含多个源包。一些源包是使用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天了。
感谢。
答案 0 :(得分:0)
您需要调查unused DT entry
的问题。如果您正在使用您的库来管理其他地方的内容,则会在每次运行时显示该警告并危及您的管道接收垃圾,或者您的应用程序接收激活。请查看我的帖子here。