【问题标题】:How can I select which version of the Poco libs to link with?如何选择要链接的 Poco 库版本?
【发布时间】:2014-07-09 14:40:12
【问题描述】:

我在这方面做了很多实验以及搜索。 How to add Poco library in Visual Studio 2010? 的 StackOverflow 响应很接近,但并不能完全解决我的问题。

具体来说,我正在尝试构建一个不依赖 Poco DLL 来运行的应用程序。当 DLL 存在时,应用程序运行良好。

在 Poco 的 lib 目录中,为本质上相同的库的许多版本提供了库,例如 CppUnit.lib、CppUnitd.lib、CppUnitmd.lib、CppUnitmdd.lib、CppUnitmt。 lib 和 CppUnitmtd.lib。

据我了解,“...mt”版本的 lib 文件允许应用程序以单片方式构建,而无需在运行时存在 Poco DLL。 (这是正确的吗?)

我正在使用 MS Visual Studio 2010,并试图鼓励链接器使用每个 Poco 库的“...mt”版本(用于调试构建的...mtd 版本。)

所有 Poco 库都在同一个目录中。我已将该目录路径添加到 Preferences>Project>Linker>General>Additional Library Directories,并且我已明确添加 CppUnitmt.lib;PocoFoundationmt.lib;PocoNetmt.lib 到 Preferences>Project>Linker>Input >其他依赖项。

链接似乎没有问题;构建成功。然而,当我运行我的应用程序时,我收到一条警告消息:“应用程序无法启动,因为您的计算机中缺少 PocoFoundation.dll。请尝试重新安装程序来解决此问题。

总而言之,我的问题是:是否可以构建不需要访问 Poco DLL 的 Poco 应用程序,如果可以,我如何告诉 VS 2010 链接器这样做?

【问题讨论】:

  • 字母(“md”/“mt”/等)必须与您自己的项目设置相匹配,以实现多线程和静态/dll 链接。参见例如this page 寻求帮助。
  • 约阿希姆,感谢您的链接。这确实有助于我更好地理解链接器。

标签: c++ visual-studio-2010 dll linker poco


【解决方案1】:

我从未使用过 Poco,因此请根据我自己对 VS 的一般经验(因为链接器设置使用具有相似名称的标志)以及其他项目来考虑以下假设。

您误解了文件名上的“扩展名”。

那些表示已用于构建库的 MSVC 运行时类型(因为它通常应该与您自己的项目匹配,否则可能会发生非常非常糟糕的事情):

  • CppUnit.lib: 这很可能是静态版本(它是否比其他非调试库大?)。如果您使用这个,您将不必使用 DLL 文件。
  • CppUnitd.lib:这很可能是静态调试版本。
  • CppUnitmt:这是使用多线程运行时的库(即不需要安装 MSVC 运行时文件)。
  • CppUnitmtd:这个使用多线程调试运行时。
  • CppUnitmd:这个使用多线程动态运行时(因此是“d”)。
  • CppUnitmdd:这个使用多线程动态调试运行时。

【讨论】:

  • 马里奥,感谢您的见解。不幸的是,图书馆的规模并不如我所愿。既没有“mt”也没有“md”的最小,然后“md”版本要大得多,“mt”版本略大于“md”版本。是的,肯定最后的单个“d”是调试版本。
  • 这种情况 mt/mtd 可能是静态的。试错如何?
  • /MT 开关做到了。我一直在对不同的库进行试验/错误,但之前没有修改 Configuration Properties > C/C++ > Code Generation > Runtime Library. 这就是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多