Reputation: 22814
I'm building static libraries (right now libpng
) in Microsoft Visual Studio 2008 SP1.
Do I have any possibility to build single library (one file) for both Debug
and Release
modes assuming that my library has only C code in it?
As far as I remember, gtkmm
, for instance, has it's pre-built package, where C++ based libraries are shipped in both Debug
and Release
versions, but other - as a single file only.
E.g. they have gtkmm-vc90-d-2_4.lib
and gtkmm-vc90-2_4.lib
files for C++ based libraries and they have single libraries such as gtk-win32-2.0.lib
for both Debug
and Release
configurations.
How can I achieve the same effect? What should I do to make the built library (pure C) configuration-independent?
Upvotes: 1
Views: 258
Reputation: 30842
In theory you could build just one library if all the external headers for the library (ie the ones pulled in by the client) don't use #ifdef _DEBUG (or any other macro that may be defined in a debug build but not a release build.
Consider a case like this:
// file: mylib.h
struct A {
int member1;
int member2;
#ifdef _DEBUG
int extraDebugOption;
#endif
};
In this case, if you were to link the library into a debug build of your own product then A will have a different size to the release build, which means you're going to have some pretty horrendous memory corruption bugs to track down (been there...).
EDIT: Forgot to mention, you should make your one configuration a Release configuration so that you don't end up with any references to the debug CRT, and also so the library is optimised. As lsalamon points out, creating a pdb file and saving this along with your .lib file will be useful in the future for debugging.
Upvotes: 1
Reputation: 8174
To include debug info at release version use this configuration :
C/C++->General->Debug Information Format: Program Database (/Zi)
and
Linker->Debugging->Generate Debug Info : Yes (/DEBUG)
Upvotes: 1