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

标签 android c++ c android-ndk ndk-build

我们的产品包含多个源包。一些源码包是使用 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/

相关文章:

Java android RecyclerView选择: IllegalStateException

Android:从 android.net.URI 构造一个文件

c - 如何在 GAS 中设置 .global 符号?

javascript - 如何将相机图像作为附件传递给邮件。 (Android、iOS、Windows Phone、Phonegap)

android - 从 SD 卡 Rajawali 解析 .obj 模型

c++ - linkList 复制构造函数和赋值运算符

c - c中的多线程应用程序

c++ - 寻找将 C/C++ 中的多行 "block"注释转换为单行注释的脚本

c++ - 如何自定义打开/保存文件对话框?

c++ - 一个静态对象,其析构函数是作用域感知的