
首先,我试图避免使用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 remountremount succeededryan@DevPC-LX:~/stuff/kdroID$adb push ./k /system/bin/k3201 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/kProcess /system/bin/k created; pID = 297Listening on port 5039
在另一个shell窗口中:
ryan@DevPC-LX:~/stuff/kdroID$arm-linux-androIDeabi-gdbGNU gdb (GDB) 7.6copyright (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 redistribute 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 kReading symbols from /media/ryan/stuff/kdroID/k...done.(gdb) target remote :5039Remote deBUGging using :50390xb0001000 in ?? ()(gdb) continueContinuing.Cannot access memory at address 0x0Program 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 0003cabcStack frame #00 pc b0004d36 /system/bin/linker: Unable to open symbol file k/linker. Error (20): Not a directory
所以…链接器似乎崩溃了.如果我将/ 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 0003cabcStack frame #00 pc b0004d36 /system/bin/linker: Routine BFD: ./linker: warning: sh_link not set for section `.ARM.exIDx'????:0Crash dump is completed
这一切都非常令人困惑.
我完全不知道此时的错误是什么.我的意思是,我觉得我的编译器命令有问题,但我不知道是什么.
编辑:我的编译器命令肯定有问题.如果我构建这个程序:
int main() { return 0; } 使用ndk-build和我之前发布的命令行标志,版本没有ndk-build段错误.
解决方法 弄清楚了!是Clang!出于某种原因,它导致了段错误.我仍然不知道为什么……但问题仍然基本解决了. 总结以上是内存溢出为你收集整理的带有二进制编译的/ system / bin / linker中的Segfault for Android全部内容,希望文章能够帮你解决带有二进制编译的/ system / bin / linker中的Segfault for Android所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)