使用aarch64-linux-gnu-ld链接后可执行文件无调试符号求助
解决方案:保留AArch64汇编程序的调试符号
问题出在你的链接命令里的-s参数——这个参数会让aarch64-linux-gnu-ld直接剥离所有符号表和重定位信息,包括你从目标文件main.o里带过来的调试符号,哪怕加了-g也无法保留。
直接修复步骤
把链接命令里的-s选项移除,重新执行链接:
aarch64-linux-gnu-ld -g -o main main.o
之后再用gdb ./main调试,就能正常识别调试符号了。
兼顾体积与调试的方案
如果需要减小最终可执行文件的体积,但又想保留调试能力,可以分两步操作:
- 先生成带完整调试符号的可执行文件:
aarch64-linux-gnu-ld -g -o main main.o - 用
strip工具生成剥离符号的精简版本(用于发布),调试时使用原版:aarch64-linux-gnu-strip main -o main_stripped
验证调试符号是否存在
可以用以下命令检查可执行文件里是否包含调试段:
readelf -S main | grep debug
如果输出里有.debug_info、.debug_line等以.debug开头的段,说明调试符号已正确保留。
内容的提问来源于stack exchange,提问作者bkomanet
相关产品推荐
相关产品推荐

