So let's say we have static library mylib.a, which contains compiled cpp files.
file1.cpp:
int do_stuff();
int func_unres()
{
int a = do_stuff();
return a;
}
file2.cpp:
int do_other_stuff();
int func_res()
{
int a = do_other_stuff();
return a;
}
file3.cpp:
int do_other_stuff()
{
return 42;
}
So, as we can see here, no file contains definition of do_stuff function.
Library created this way:
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
Now we try to make some binary with this library. Simple example main file:
#include <iostream>
int func_res();
int main()
{
std::cout << func_res() << std::endl;
}
Compiling:
g++ main.cpp mylib.a -o my_bin
Everything works just fine. Now consider case of main file like this:
#include <iostream>
int func_unres();
int main()
{
std::cout << func_unres() << std::endl;
}
In this case binary won't link, cause func_unres requires function do_stuff to be defined.
Is there a way to find out that static library requires symbol which no object file in the library contains before linking it with executable, which uses such symbol?
EDIT: The question is not how to simple list such symbols, but to get an output with linker like error. Like if i linked this library with executable using all of symbols it should contain.
Is there a way to find out that static library requires symbol which no object file in the library contains before linking it with executable, which uses such symbol?How would you know which symbols are used in the executable? Or are you interested in all symbols that are not defined but used in a static library? - KamilCukit's too much of workNo, it's not, it's likenm mylib.a | awk '$2 == "u" { print "void "$3"(void); "$3"();" }' > file.c; gcc file.c mylib.a.And i want somethingso implement that, stackoverflow is not a free writing service. It seems that evengcc -Wl,--whole-archive mylib.a -Wl,--no-whole-archiveis enough to list all undefined symbols (andmain). - KamilCuk