Visual Studio:如何为链接器指定不同的运行时库?(/MTd、MDd 等)

Tho*_*lik 5 c++ dll linker visual-studio-2008 visual-c++

我正在链接到 VS2008 中的一些库。如果我对链接器的了解是正确的,MTd 用于静态链接,MDd 用于动态链接(到 DLL)。我的目标是静态链接一些库并动态链接其他库。项目选项似乎对链接器输入中的所有库只有一种设置。我该怎么做?

Ste*_*end 5

设置后,您的项目将获得一个合理的 C 运行时库默认值,具体取决于您如何回答“新建项目向导”提示。您可以检查并更改它(如果需要),如下所示:

  • 在解决方案资源管理器中右键单击相关项目,选择属性
  • 查看配置属性、C/C++、代码生成、运行时库。

可以根据需要链接其他库,只需在“链接器”、“输入”、“附加依赖项”下指定要链接的库即可。

即使您链接到 DLL,它仍然会有一个 .LIB 文件(DLL 的正确形式)来解析外部引用,除非您手动加载 DLL 并发现所需的函数入口点。

您确实需要确保链接的 LIB 文件使用与应用程序相同的 CRT,否则可能会出现意外错误。


Han*_*ant 5

不,你把它搞混了。/MD 与 /MT 选项仅与您链接的 CRT 版本相关。有两个静态版本 (/MT),仅当您的项目中不使用任何 DLL 时才应使用。还有 DLL 版本,进程中的每个二进制文件都可以共享该版本,这样您就不会遇到堆分配的痛苦。当内存被一个模块分配并被另一个模块释放时,你会陷入一种痛苦。

选择自己的库完全取决于您。混合和匹配很好,链接器只是获得另一种 .lib。导入库而不是静态库。使用 DLL 时请记住使用 /MD。

  • 到目前为止,堆损坏是析构函数崩溃的最常见原因。但是,是的,我发出的具体警告是合适的。混合调试和发布可能会给 STL 迭代器调试带来麻烦,但这通常会更快地失败。 (2认同)