NDK12b: clang和gcc使用独立的工具链和相同的构建脚本生成不同的ELF
NDK12b: Different ELF produced by clang vs gcc using the standalone toolchain and the same build scripts
我们的产品包含多个源代码包。有些源包是使用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
的问题。如果你使用你的库在其他地方管道东西,这个警告会在每次运行时出现,并危及你的管道接收垃圾,或者你的应用程序接收异常。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- 如何通过cpp程序运行shell脚本
- 我适合在我的构建系统中使用 shell 脚本而不是AX_CHECK_COMPILE_FLAG吗?
- Eclipse IDE C/C++ 自动包含来自定制构建脚本的路径
- 如何在构建时改进我的脚本和复制程序资源?
- 在构建之前,如何使Cmake在构建之前运行Python脚本,以生成用于构建中的项目的文件
- MSVC2013:如何避免在错误地使用预构建脚本中止构建过程(错误MSB3073:VCEnd"退出,代码为 -1)
- 可视化 将 c++ 可执行文件图标添加到预制件 5 构建脚本
- 在C 中构建并运行C -C 脚本(而不是LUA)
- 如何构建访问联机脚本的程序
- Shell脚本或c++库,用于查看互联网连接并构建防火墙
- 如何为C++项目编写简单的通用构建脚本
- NDK12b: clang和gcc使用独立的工具链和相同的构建脚本生成不同的ELF
- 为什么Xcode 4.2为.cpp文件应用C文件构建规则脚本?
- 在构建之前在eclipse中运行一个脚本
- 如何运行CMD脚本,而不是构建和启动c++控制台应用程序
- Coverity:基本c++代码的命令行构建脚本