I am trying to understand how do compiler writers fetch function names
and then verify if they are in compliance with their prototype. Is it
possible to construct a symbol table of just the functions used in a
project ?

Thanks.
[Of course it's possible to construct a symbol table of functions,
although in C++ the prototypes are found in the header files included
by each module so there's no need. There's also an old trick: encode
the argument types of each function as a byte string, put the byte
string into the object file symbol table, and have the linker compare
those byte strings and complain if they don't match. The linker doesn't
have to understand the types, just see if they match. -John]