大佬教程收集整理的这篇文章主要介绍了带有二进制编译的/ system / bin / linker中的Segfault for Android,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
首先,我试图避免使用Ndk-build,因此编辑了makefile以支持Android.其中的细节对这个问题(或有趣)并不特别有用,所以我会跳过它们.
基本上,源文件的编译方式如下:
arm-linux-androideabi-clang -g -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -mtune=xscale -msoft-float -mthumb -fomit-frame-pointer -fno-Strict-aliasing -O3 -c -o src/ks.o src/ks.c ... arm-linux-androideabi-clang -g -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -mtune=xscale -msoft-float -mthumb -fomit-frame-pointer -fno-Strict-aliasing -O3 src/0.o src/c.o src/getline.o src/getline_android.o src/mt.o src/p.o src/r.o src/k.o src/kc.o src/kx.o src/kg.o src/km.o src/kn.o src/ko.o src/ks.o src/v.o src/va.o src/vc.o src/vd.o src/vf.o src/vg.o src/vq.o src/main.o -o k -Wl,--gc-sections -Wl,-z,nocopyreloc -lgcc -no-canonical-prefixes -Wl,--no-undefined -Wl,noexecstack -Wl,relro -Wl,Now -mthumb -lc -lm -ldl
我根据我看到的ndk-build使用了这些标志.然后我运行了以下内容:
ryan@DevPC-LX:~/stuff/kdroid$adb remount remount succeeded ryan@DevPC-LX:~/stuff/kdroid$adb push ./k /system/bin/k 3201 KB/s (724928 bytes in 0.221s) ryan@DevPC-LX:~/stuff/kdroid$
ryan@DevPC-LX:~/stuff/kdroid$adb sHell # k [1] + Stopped (signal) k # [1] Segmentation fault k #
这是开始变得奇怪的地方.如果我尝试使用gdb,我得到这个:
ryan@DevPC-LX:~/stuff/kdroid$adb sHell # gdbserver :5039 /system/bin/k Process /system/bin/k created; pid = 297 Listening on port 5039
ryan@DevPC-LX:~/stuff/kdroid$arm-linux-androideabi-gdb GNU gdb (GDB) 7.6 Copyright (C) 2013 Free Software Foundation,Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and @R_450_9066@tribute it. There is NO WARRANTY,to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=x86_64-linux-gnu --target=arm-linux-android". For bug reporTing instructions,please see: <http://source.android.com/source/report-bugs.html>. /home/ryan/.gdbinit:1: Error in sourced command file: No symbol table is loaded. Use the "file" command. (gdb) symbol-file k Reading symbols from /media/ryan/stuff/kdroid/k...done. (gdb) target remote :5039 Remote debugging using :5039 0xb0001000 in ?? () (gdb) conTinue ConTinuing. CAnnot access memory at address 0x0 Program received signal SIGSEGV,Segmentation fault. 0xb0004d36 in ?? () (gdb) bt #0 0xb0004d36 in ?? () #1 0xb0005278 in ?? () #2 0xb0005278 in ?? () BACktrace stopped: prevIoUs frame identical to this frame (corrupt stack?) (gdb)
ndk-stack给了我这个:
********** Crash dump: ********** Build fingerprint: 'generic/sdk/generic:2.3.3/GRI34/101070:eng/test-keys' pid: 297,tid: 297 >>> /system/bin/k <<< signal 11 (SIGSEGV),code 1 (SEGV_MAPERR),fault addr 0003cabc Stack frame #00 pc b0004d36 /system/bin/linker: Unable to open symbol file k/linker. Error (20): Not a directory
所以…@L_801_17@器似乎崩溃了.如果我将/ system / bin / linker拉入当前目录,那么我得到:
********** Crash dump: ********** Build fingerprint: 'generic/sdk/generic:2.3.3/GRI34/101070:eng/test-keys' pid: 291,tid: 291 >>> k <<< signal 11 (SIGSEGV),fault addr 0003cabc Stack frame #00 pc b0004d36 /system/bin/linker: RoutIne BFD: ./linker: warning: sh_link not set for section `.ARm.exidx' ?? ??:0 Crash dump is completed
这一切都非常令人困惑.
我完全不知道此时的错误是什么.我的意思是,我觉得我的编译器命令有问题,但我不知道是什么.
编辑:我的编译器命令肯定有问题.如果我构建这个程序:
int main() { return 0; }
以上是大佬教程为你收集整理的带有二进制编译的/ system / bin / linker中的Segfault for Android全部内容,希望文章能够帮你解决带有二进制编译的/ system / bin / linker中的Segfault for Android所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。