Android 本机 printf 在 x86_64(模拟器)上崩溃,而在 x86 上运行良好

问题描述 投票:0回答:0

我有一个本机可执行文件,它在 x86_64 (API30) 上启动时崩溃,但在 x86 上运行良好。在 X86_64 API 21 上也运行良好。

它的入口第一行代码是:

printf("Starting");

还测试了这个:

__android_log_print(ANDROID_LOG_WARN, TAG, "Starting");

这里是使用 log_print 时的转储:

signal 11 (SIGSEGV), code 128 (SI_KERNEL), fault addr 0x0
#00 pc 0000000000009a24  /system/lib64/liblog.so (__android_log_level(char const*, unsigned long)+132) (BuildId: fe04dbc8d214fc65da81cacaf867b284)
#01 pc 0000000000009ec7  /system/lib64/liblog.so (__android_log_is_loggable+55) (BuildId: fe04dbc8d214fc65da81cacaf867b284)
#02 pc 0000000000007a27  /system/lib64/liblog.so (__android_log_print+135) (BuildId: fe04dbc8d214fc65da81cacaf867b284)
#03 pc 000000000009ca74  /data/app/~~XDpzR94g1TpiMQSCYqgNvA==/ccc71.at.free-SQEF9Jt3nPM0qDRUmW3P1Q==/lib/x86_64/liblib3c.so (entry_point+36) (BuildId: 6fa63521ac2c4be916d2aad9640a192de6db6ef3)
#04 pc 0000000000000001  <unknown>

这是使用 printf() 时的转储:

backtrace:
#00 pc 00000000000c1cd0  /apex/com.android.runtime/lib64/bionic/libc.so (printf+112) (BuildId: 3707c39fc397eeaa328142d90b50a973)
#01 pc 000000000009ca88  /data/app/~~b68Ahj-zb4or4ECmKeyAhQ==/ccc71.at.free-v45ABuNSbmqW6dkOBadBZw==/lib/x86_64/liblib3c.so (entry_point+24) (BuildId: b80461f2139db953674f6a3eb7a0eefbe02b891e)
#02 pc 0000000000000001  <unknown>

我在构建时使用的唯一特定设置是:

-DCMAKE_SHARED_LINKER_FLAGS=-shared -fPIC -Wl,-e,entry_point -Wl,--gc-sections

这允许 exe 作为库从 Java 应用程序加载并作为可执行文件从 shell 运行。它在 arm 32/64 位设备上完美运行。

解决此问题的任何帮助将不胜感激。

作为参考,该问题已发布到 Google 的问题跟踪器:https://issuetracker.google.com/u/1/issues/270034825

android crash native
© www.soinside.com 2019 - 2024. All rights reserved.