Допустим, у нас есть stati c библиотека mylib.a, которая содержит скомпилированные cpp файлы.
file1. cpp:
int do_stuff();
int func_unres()
{
int a = do_stuff();
return a;
}
файл2. cpp:
int do_other_stuff();
int func_res()
{
int a = do_other_stuff();
return a;
}
файл3. cpp:
int do_other_stuff()
{
return 42;
}
Итак, как мы видим здесь нет файла, содержащего определение функции do_stuff
. Библиотека создана таким образом:
g ++ - c file1. cpp -o file1.o
g ++ - c file2. cpp -o file2.o
g ++ - c file3. cpp -o file3.o
ar r mylib.a file1.o file2.o file3.o
Теперь попробуем сделать с этой библиотекой какой-нибудь двоичный файл. Простой пример основного файла:
#include <iostream>
int func_res();
int main()
{
std::cout << func_res() << std::endl;
}
Компиляция:
g ++ main. cpp mylib.a -o my_bin
Все работает отлично . Теперь рассмотрим пример основного файла:
#include <iostream>
int func_unres();
int main()
{
std::cout << func_unres() << std::endl;
}
В этом случае двоичный файл не будет связываться, потому что func_unres
требует, чтобы функция do_stuff
была определена.
Есть ли способ чтобы узнать, что библиотека stati c требует символа, которого нет в объектном файле в библиотеке, прежде чем связывать его с исполняемым файлом, который использует такой символ?
EDIT: вопрос не в том, как просто перечислить такие символы, но получить вывод с ошибкой компоновщика. Например, если бы я связал эту библиотеку с исполняемым файлом, используя все символы, которые он должен содержать.