【发布时间】:2010-04-27 14:51:37
【问题描述】:
像msvcr70/msvcr80/msvcr90.dll,指示链接器动态链接到其中一个的代码是什么样的?
或者这和c/c++有什么关系,但是cmake?
【问题讨论】:
像msvcr70/msvcr80/msvcr90.dll,指示链接器动态链接到其中一个的代码是什么样的?
或者这和c/c++有什么关系,但是cmake?
【问题讨论】:
您给出的具体示例恰好是通常通过清单和并排链接的 DLL,至少在从 Visual Studio 构建应用程序(使用正确的项目设置)时是如此。为什么要指示编译器通过代码链接它们?
链接到特定 DLL 最常用的方法是,当您有可用的 DLL 库时,然后使用编译指示
#pragma comment(lib, "<library name>")
【讨论】:
您在链接时指定一个 .lib 文件,而匹配的 .dll 将在运行时使用,因此(例如)如果您想使用 msvcr70.dll,您需要与 msvcr70.lib 链接。
【讨论】:
通常,您链接的 C/C++ 运行时取决于您使用的 VisualStudio 版本。 (msvcr80.dll -> VS2005, msvcr90.dll -> VS2008 等)
您可以在此blog post 中阅读有关其工作原理的更深入见解以及一些工作技巧。
【讨论】:
嗯,你肯定想先了解 DLL/链接...http://www.infernodevelopment.com/how-create-dll-c-using-run-time-dynamic-linking
所写的问题无法回答
注意:不确定您对 Cmake 的含义,但您可以轻松地在 CMakeLists.txt 文件中指定链接库...例外是您注意的 DLL,因为它们是平台相关的。您需要 CMake 脚本中的某些内容来检查 MSVC 的版本。
您为什么要链接到较旧的运行时,Vista 以后带有 VC9 运行时,如果有人使用 XP,您可以给他们 VS2008/2010 的“可再发行包”...
【讨论】:
cmake 使用 VS2008/2010 的“可再发行包”?