作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好,我从各自的 cpp 文件创建了目标文件。然后制作用于执行程序的通用可执行文件。
g++ -Wall -g -c main.cpp -o main.o
g++ -Wall -g -c pts.cpp -o pts.o
g++ -Wall -g -c rts.cpp -o rts.o
g++ -o main main.o rts.o pts.o
我不确定是否可以从可执行文件(在本例中为 main)中获取目标文件。如果是,那么如何?
最佳答案
由于您使用 -g
标志进行编译,因此您可以使用任何 DWARF 读取实用程序来查看有关编译单元的信息。例如,您可以使用:
`dwarfdump -r main`
示例输出:
.debug_aranges
COMPILE_UNIT<header overall offset = 0x00000000>:
< 0><0x0000000b> DW_TAG_compile_unit
DW_AT_producer "GNU C++ 4.9.2 -mtune=generic -march=x86-64 -g -std=c++11"
DW_AT_language DW_LANG_C_plus_plus
DW_AT_name "main.cc"
DW_AT_comp_dir "/home/yam/tmp/bla"
DW_AT_low_pc 0x004006b6
DW_AT_high_pc <offset-from-lowpc>93
DW_AT_stmt_list 0x00000000
arange starts at 0x004006b6, length of 0x0000005d, cu_die_offset = 0x0000000b
arange end
COMPILE_UNIT<header overall offset = 0x00002a66>:
< 0><0x0000000b> DW_TAG_compile_unit
DW_AT_producer "GNU C++ 4.9.2 -mtune=generic -march=x86-64 -g -std=c++11"
DW_AT_language DW_LANG_C_plus_plus
DW_AT_name "test.cc"
DW_AT_comp_dir "/home/yam/tmp/bla"
DW_AT_low_pc 0x00400713
DW_AT_high_pc <offset-from-lowpc>11
DW_AT_stmt_list 0x00000365
你也可以做一些简单的解析:
dwarfdump -r main | \
grep 'AT_name\|AT_comp_dir' | \
tac | sed -r 's/.*"(.*)"/\1/' | \
ruby -e 'STDIN.readlines.map(&:strip).each_slice(2) { |s| puts File.join(*s) }'
哪些输出
/home/yam/tmp/bla/test.cc
/home/yam/tmp/bla/main.cc
由于您的设置将 X.cpp
编译为 X.o
,您也可以只替换扩展名并获取对象文件名。
关于c++ - 如何从可执行文件中取回目标文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35700685/
我是一名优秀的程序员,十分优秀!