我有一个本机可执行文件,它在 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