如何选择要链接的Poco库的版本?

时间:2014-07-09 14:40:12

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

我已经对此进行了相当多的实验以及搜索。在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。

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

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

所有Poco库都在同一目录中。我已将该目录路径添加到首选项>项目>链接器>常规>其他库目录,我已明确地将 CppUnitmt.lib; PocoFoundationmt.lib; PocoNetmt.lib 添加到首选项>项目>链接器>输入&gt ;附加依赖。

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

总结一下,我的问题是:可以构建一个不需要访问Poco DLL的Poco应用程序,如果是这样,我该如何告诉VS 2010 Linker这样做?

1 个答案:

答案 0 :(得分:1)

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

你误解了"扩展"在文件名上。

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

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