9
votes

I have a project whose output is a library (.lib). The project depends on a third party library (also a .lib). In order to avoid projects built on top of my library having to worry about this third party dependency, I have used the librarian to include it in mine (Project Properties > Librarian > General > Additional Dependencies).

However, when I build a separate executable project which links to my library, I get a bunch of warnings along the lines of:

MyProject.lib(someThirdPartyObjectFile.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with 'MyProject.lib(someThirdPartyObjectFile.obj)' or at '\vc110.pdb'; linking object as if no debug info

This means (I assume) that I will be able to debug any code belonging to my library, but not to the third party library.

How can I instruct Visual Studio to also include the contents of the third party library's PDB in mine?

2
You can still debug without pdb file, but it will be without debug info (function names, etc...). I had this warning once, but it was without consequences (and I do not remember how I fixed it). Was with VS2008, though. Maybe you can try to build and debug, to see if the debug info is really used. Last: static or dynamic lib ?Synxis
@Synxis I intend to, I just haven't had a chance to try out the proposed solutions yet. I will do that soon.JBentley

2 Answers

8
votes

The static library has probably been moved, so the compiler can't find the symbols from it. You have several options:

  • change debugging format to /Z7, which embeds the debug info in the code (whereas /Zi and /ZI put it in a separate file).
  • change the output configuration of the pdb file (for VS2005 it was Settings > C++ > Output Files > Program Database File Name, probably similar in VS2010).

You can find more information here and here.

0
votes

Go to Property Pages (Alt+F7) Linker, All options, Generate Debug Info set into No Position