аналогичен ответу Микелса, но использует другой инструмент, который (может) даст вам более чистый результат.
В прошлом я имел удовольствие работать с инструментом для анализа отладочной информации под названием DIVA. Это бесплатный и открытый исходный код, и вы можете найти его здесь:
https://github.com/SNSystems/DIVA
Хотя с DIVA невозможно найти, какие объектные файлы были связаны для создания вашего исполняемого файла, вы можете использовать его для определения модулей компиляции.
Я быстро собрал небольшой пример следующим образом
a.cpp
int a() {
return 1;
}
хиджры
int a();
b.cpp
int b() {
return 2;
}
b.h
int b();
c.cpp
#include "a.h"
#include "b.h"
int main() {
return a + b;
}
Скомпилировал их с помощью clang, используя следующие опции
$ clang a.cpp b.cpp c.cpp -o test.elf -g -O0
запустить DIVA на test.elf со следующими параметрами:
$ diva --show-none test.elf
Который должен выдавать следующий вывод
{InputFile} "test.elf"
{CompileUnit} "a.cpp"
{CompileUnit} "b.cpp"
{CompileUnit} "c.cpp"