我正在Microsoft Visual Studio 2008 SP1中构建静态库(现在是libpng
)。
我是否有可能为Debug
和Release
模式构建单个库(一个文件),假设我的库中只包含C代码?
据我所知,例如,gtkmm
有预先构建的软件包,其中基于C ++的库以Debug
和Release
版本提供,但其他 - 如仅限一个文件。
E.g。他们拥有基于C ++的库的gtkmm-vc90-d-2_4.lib
和gtkmm-vc90-2_4.lib
个文件,并且gtk-win32-2.0.lib
和Debug
配置都有Release
个单独的库。
如何达到同样的效果?我该怎么做才能使构建的库(纯C)与配置无关?
答案 0 :(得分:1)
理论上你可以构建一个库如果库的所有外部头文件(即客户端引入的头文件)不使用#ifdef _DEBUG(或任何其他可能的宏)在调试版本中定义,但不在发布版本中定义。
考虑这样的情况:
// file: mylib.h
struct A {
int member1;
int member2;
#ifdef _DEBUG
int extraDebugOption;
#endif
};
在这种情况下,如果您要将库链接到您自己产品的调试版本中,那么A将具有与版本构建不同的大小,这意味着您将要有一些非常可怕的内存损坏错误来跟踪下来(去那里......)。
编辑: 忘了提一下,你应该让你的一个配置成为Release配置,这样你就不会得到任何对调试CRT的引用,同时也优化了库。正如lsalamon指出的那样,创建一个pdb文件并将其与.lib文件一起保存将在将来用于调试时很有用。
答案 1 :(得分:1)
要在发布版本中包含调试信息,请使用以下配置:
C / C ++ - > General->调试信息格式:程序数据库(/ Zi)
和
Linker-> Debugging->生成调试信息:是(/ DEBUG)