CMakeLists.txt“ -Wl,-whole-archive”选项在Samsung Galaxy Note2,S3(Kitkat 4.4.2)上导致SIGABRT错误

如果将-Wl,--allow-multiple-definition -Wl,--whole-archive选项添加到CMakeLists.txt。
System.loadlibrary("~");总是会导致SIGABRT错误。
错误:A/libc: Fatal signal 6 (SIGABRT) at 0x000036ae (code=-6),thread 13998

我发现这些崩溃会在Galaxy Note 2,Galaxy s3(exynos 4 Quad 4412,ARM Cortex-A9 CPU,Android 4.4.2 Kitkat)上引发

使用Android Studio项目“ Native C ++”模板创建新项目,并在CmakeLists.txt下方添加一行代码。

set(CMAKE_SHARED_LINKER_flaGS "-Wl,--whole-archive")

它总是在System.loadlibrary("~");行崩溃。

基于“本地C ++”模板的代码存储库:https://github.com/kujyp/AndroidNativeWholeArchiveCrash

NDK版本:14.1.3816874

cat ~/library/Android/sdk/ndk-bundle/source.properties
> Pkg.Desc = Android NDK
> Pkg.Revision = 14.1.3816874

如果将ndk版本更改为20(20.1.5948944),则会出现另一个错误。
错误:java.lang.UnsatisfiedLinkError: dlopen failed: could not load library "libc++_shared.so" needed by "libnative-lib.so"; caused by library "libc++_shared.so" not found

已解决(但仍在星系注释2上崩溃):https://github.com/kujyp/AndroidNativeWholeArchiveCrash/commit/479c15918241e5c68621f27b22c1d56c6c9906ce

有什么线索吗?还是解决方案?

背景:
https://gist.github.com/kujyp/9c4c8c63cfd12f797639874d151b1707#file-with_tf1-4_cmakelists-txt

我的项目具有tensorflow-core.a(v1.4.0)作为依赖项。因此,在没有--allow-multiple-definition--whole-archive的情况下,tensorflow库会引发一些构建错误。所以我的编译器选项,链接器选项与tensorflow存储库中的相同。
选项:https://github.com/tensorflow/tensorflow/blob/v1.4.0/tensorflow/contrib/android/cmake/CMakeLists.txt#L45-L48
关于--whole-archive选项的问题:https://github.com/tensorflow/tensorflow/issues/4242

对于tensorflow库,应该使用gcc而不是clang作为构建工具。从ndk 15起,不建议使用gcc。
(从tf1.13.1起,clang被用作构建工具,但我的项目使用的是tensorflow 1.4.0或1.5.1或1.12.0)
张量流的Ndk版本:https://github.com/tensorflow/tensorflow/blob/v1.4.0/tensorflow/tools/ci_build/Dockerfile.android#L44

baiyanhua_2005 回答:CMakeLists.txt“ -Wl,-whole-archive”选项在Samsung Galaxy Note2,S3(Kitkat 4.4.2)上导致SIGABRT错误

-Wl,--whole-archive不应在没有因果关系的情况下添加到链接器标志中。甚至本机代码也不起作用,-Wl,--whole-archive标志导致特定(古老)设备上的崩溃。

-Wl,--whole-archive附加到单个库,并将-Wl,--no-whole-archive附加到其他库可解决此崩溃。

已解析的CMakeLists.txt:https://gist.github.com/kujyp/9c4c8c63cfd12f797639874d151b1707#file-resolved_tf1-4_cmakelists-txt-L35-L37

感谢@DanAlbert

本文链接:https://www.f2er.com/3144758.html

大家都在问