不同版本的 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++ 库的主要内容,如果未能解决你的问题,请参考以下文章
使用与使用不同 gcc 版本编译的库不同的 gcc 编译应用程序