不同版本的 C++ 库

Posted

技术标签:

【中文标题】不同版本的 C++ 库【英文标题】:Different versions of C++ libraries 【发布时间】:2010-09-10 09:16:13 【问题描述】:

在 vista 上使用 Visual Studio 2008 编译一个简单的 C++ 项目后,一切都在原始 vista 机器和其他 vista 计算机上运行良好。但是,将其移至 XP 框会导致错误消息:“应用程序无法启动,因为应用程序配置不正确”。

我必须怎么做才能使我编译的 EXE 在 XP 和 Vista 上运行?几个月前我也遇到过同样的问题,只是在项目中修改了一些设置就修复了它,但我不记得我改变了哪些。

【问题讨论】:

【参考方案1】:

您需要在目标计算机上安装 Visual Studios 2008 运行时:

http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en

或者,您也可以静态链接运行时,在项目属性窗口中转到:

c++ -> 代码生成 -> 运行时 库并选择“多线程 /MT"

【讨论】:

【参考方案2】:

您需要将运行时可再发行文件安装到您尝试运行应用程序的机器上。

2008 年的可再发行版是 here。

2005 年的可再发行文件是 here。

它们可以并排安装,以防您需要两者。

【讨论】:

是的,但我宁愿不必让用户这样做。有没有办法针对旧库进行编译?【参考方案3】:

您可能需要将 VC 运行时与您的应用程序一起分发。有多种方法可以做到这一点。如果您使用的是 Visual Studio 2005 或 2008,来自 Microsoft Visual C++ 团队的This article 最好地解释了分发这些依赖项的不同方法。

如文章中所述,尽管您可以下载 Redistributable 安装程序包并简单地在客户端计算机上启动它,但这几乎总是不是最佳选择。通常有更好的方法来包含所需的 DLL,例如,如果您通过 Windows 安装程序分发,则包含合并模块;如果您只想分发压缩文件夹,则包含 App-Local 副本。

另一种选择是静态链接运行时库,而不是与您的应用程序一起分发它们。此选项仅适用于不加载其他 DLL 的独立 EXE。您也不能对其他应用程序加载的 DLL 执行此操作。

【讨论】:

【参考方案4】:

静态链接到运行时是最简单的。

c++ -> 代码生成 -> 运行时库并选择“多线程/MT”

但是,这确实会使您的可执行文件大几百 KByte。如果您要安装大量的小程序,这可能会成为一个问题,因为每个小程序都会被自己的运行时副本所累。答案是创建一个安装程序。

新建项目->“设置和部署”->“设置项目”

将应用程序项目的输出(使用运行时的 DLL 版本定义)加载到安装程序项目中并构建它。将注意到对运行时 DLL 的依赖,将其包含在安装程序包中,并整齐且不显眼地安装在目标机器上的正确位置。

【讨论】:

【参考方案5】:

Visual Studio 2005 实际上有两个

the original release的那个

还有一个for SP1

【讨论】:

以上是关于不同版本的 C++ 库的主要内容,如果未能解决你的问题,请参考以下文章

由于C++类库版本不同导致的OpenCV编译链接错误

自动包含不同版本的 OpenCV 库

使用与使用不同 gcc 版本编译的库不同的 gcc 编译应用程序

对于不同版本的 Microsoft Visual C++,编译的 .lib 文件是不是可以互换?

c++混合使用不同标准编译潜在的问题

链接使用不同版本的 gcc 编译的库