C ++ - 构建库

时间:2010-08-17 20:10:26

标签: c++ visual-studio build libraries

我正在Microsoft Visual Studio 2008 SP1中构建静态库(现在是libpng)。

我是否有可能为DebugRelease模式构建单个库(一个文件),假设我的库中只包含C代码?

据我所知,例如,gtkmm有预先构建的软件包,其中基于C ++的库以DebugRelease版本提供,但其他 - 如仅限一个文件。

E.g。他们拥有基于C ++的库的gtkmm-vc90-d-2_4.libgtkmm-vc90-2_4.lib个文件,并且gtk-win32-2.0.libDebug配置都有Release个单独的库。

如何达到同样的效果?我该怎么做才能使构建的库(纯C)与配置无关?

2 个答案:

答案 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)