Re: Exporting debugging symbols in a static .lib
"James Kanze" wrote:
It is no different from .EXE or .DLL file. You supply the
resulting .PDB file along with the project output.
Which causes what commands to be generated? I'm building from
the command line.
For .EXE or .DLL file you run linker tool with /PDB command, which
generates resulting .PDB file. Also, linker embeds reference to
this .PDB file into the executable.
However, static library is built without linker. So, we have /Zi
(or /ZI) and /Fd compiler options to generate .PDB file. I have
never tested it personally, but it seems that compiler merges
debug information if the same .PDB filename is specified for
several source files.
Does this mean that if I compile the different objects with the
same program database file, they'll merge, rather than the last
one overwriting the previous one?
Yes, it seems to be the case. I have static library project with
default .PDB filename ("VC90.pdb") for all source files.
Nonetheless, during debug session the information is available for
every symbol, no matter from which source file it came from.
If you don't specify /Fd option (either via project settings or
manually), then the .PDB file name defaults to VCx0.pdb., where
x is the major version of Visual C++ in use.
That may be a good solution for me; I can later rename or copy
the file when building the library.
I am afraid this setup won?t work smoothly. The problem is that
compiler embeds full path of the .PDB file into .OBJ file. So, if
you rename original .PDB file, then you'll get into troubles
during debug session.
I think the best solution in your case is to specify /Z7 compiler
option. It will cause the compiler to generate debug info directly
into .OBJ files leaving out .PDB hustle altogether.