不同版本的 C++ 库

     2023-02-25     123

关键词:

【中文标题】不同版本的 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

【讨论】:

自动包含不同版本的 OpenCV 库

】自动包含不同版本的OpenCV库【英文标题】:AutomaticallyIncludingOpenCVLibrariesofDifferentVersions【发布时间】:2012-04-0521:18:02【问题描述】:我已经在Windows7上的VisualStudio2008上自动包含我的c++代码的opencv库文件,代码如下:#ifndefNDEBUG#pr... 查看详情

如何在一个代码库中支持两个版本不同命名空间的第三方库

】如何在一个代码库中支持两个版本不同命名空间的第三方库【英文标题】:Howtosupporttwoversionsofthird-partylibrarieswithdifferentnamespacesinonecodebase【发布时间】:2020-12-1007:19:27【问题描述】:我有两个版本的第三方C++库(lib.so和头文件... 查看详情

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

】使用与使用不同gcc版本编译的库不同的gcc编译应用程序【英文标题】:compileapplicationwithgccthatisdifferentfromlibrarycompiledwithdifferentgccversion【发布时间】:2015-04-1506:28:01【问题描述】:我想用gcc4.7编译一个c++应用程序,这个应用程... 查看详情

c++基础语法梳理:链接装载库丨linux的共享库(代码片段)

...terface)的兼容命名libname.so.x.y.zx:主版本号,不同主版本号的库之间不兼容,需要重新编译y: 查看详情

混合来自不同 C++ 编译器的库

】混合来自不同C++编译器的库【英文标题】:MixinglibrariesfromdifferentC++compilers【发布时间】:2009-05-1918:13:56【问题描述】:我正在开发一个跨越多个不同组织的项目的redhat5.2。每个组织都提供已使用各种版本的g++编译的库。目前... 查看详情

与不同 C++ 标准链接的 C++ 标准库

】与不同C++标准链接的C++标准库【英文标题】:C++stdlibrarylinkingwithdifferentC++standards【发布时间】:2011-06-1601:00:49【问题描述】:我正在使用Cygwin(GCCv4.5.0)编译一个项目,但我遇到了一个奇怪的链接器问题。我希望有一些专业知识... 查看详情

提高 C++ 语言版本和标准库依赖项方面的要求

】提高C++语言版本和标准库依赖项方面的要求【英文标题】:BoostrequirementsintermsofC++languageversionandStandardLibrarydependencies【发布时间】:2014-10-2710:41:35【问题描述】:经过大量研究和深入研究Boost库文档后,我找不到以下问题的答... 查看详情

不同编译器中的 C++ 标准库实现

】不同编译器中的C++标准库实现【英文标题】:C++standardlibraryimplementationsindifferentcompilers【发布时间】:2013-05-2713:26:32【问题描述】:我想知道在不同的C++编译器中使用了哪些C++标准库。我尝试搜索它,但找不到完整的列表。我... 查看详情

分布式 dll 和 c++ 对象 - 一些库如何处理这个?

...:17【问题描述】:最近我发现,如果可执行文件和dll是用不同的编译器编译的,甚至是使用不同版本的same编译器,甚至是不同的强>相同编译器!说我很惊讶就是无话可说——一直以来我都认为我可以创建一个动态库并安全地... 查看详情

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

】链接使用不同版本的gcc编译的库【英文标题】:Linkinglibrariescompiledwithdifferentversionofgcc【发布时间】:2013-01-2916:06:36【问题描述】:我有一个C++软件(Borealis流引擎),该软件已编译并与GCC3.3.6一起使用(我无法使其与较新版本... 查看详情

opencv 和 c++ 编译版本无需运行库

】opencv和c++编译版本无需运行库【英文标题】:opencvandc++compilereleasewithoutneedlibraryforrun【发布时间】:2017-09-0319:33:51【问题描述】:首先我有简单的c++代码和opencv不管代码是什么现在在Windows中,我使用了VisualStudio,并将打开的cv... 查看详情

相同算法的 C++ 和 Python 版本给出不同的结果

】相同算法的C++和Python版本给出不同的结果【英文标题】:C++andPythonversionofthesamealgorithmgivingdifferentresult【发布时间】:2015-04-2804:23:50【问题描述】:以下代码是一种算法,用于确定具有整数中位数的最大边小于或等于MAX的整数... 查看详情

为不同的编译器版本维护多个构建

】为不同的编译器版本维护多个构建【英文标题】:Maintainingmultiplebuildsfordifferentcompilerversions【发布时间】:2015-11-2612:39:40【问题描述】:我正在开发一个C++库,并使用Makefile来编译和创建构建。我希望为不同的gcc编译器版本维... 查看详情

c++ 中的每个对象是不是包含不同版本的类成员函数?

】c++中的每个对象是不是包含不同版本的类成员函数?【英文标题】:Doeseachobjectinc++containadifferentversionoftheclass\'smemberfunctions?c++中的每个对象是否包含不同版本的类成员函数?【发布时间】:2020-11-1117:40:24【问题描述】:我只是... 查看详情

如何使用使用不同选项构建的 C# 和 C++ 库创建 Nuget 包?

】如何使用使用不同选项构建的C#和C++库创建Nuget包?【英文标题】:HowtocreateNugetpackagewithC#andC++librariesbuiltwithdifferentoptions?【发布时间】:2015-03-1213:19:53【问题描述】:有一个projectthatwrapsV8engineintoC#library。它的nuget包坏了,我想... 查看详情

c语言和c++头文件在哪些地方有所不同

c语言头文件有.h,且里面声明的实体都是全局的。C++标准库的头文件不带.h,且里面的实体都是声明在名空间std里。C++为了兼容c,支持所有的c头文件,但为了符合c++标准,所有的c头文件都有一个c++版本的,即去掉.h,并在名子... 查看详情

使用 C++ 读取 .las 版本 1.3,并使用 pcl 库显示结果

】使用C++读取.las版本1.3,并使用pcl库显示结果【英文标题】:Reading.lasversion1.3usingC++,anddisplayingtheresultsusingpcllibrary【发布时间】:2021-05-0503:45:22【问题描述】:我对点云世界还很陌生。此外,我在C++方面的经验并不多。我需要阅... 查看详情

如何将托管 c++ 库导入 C# 应用程序(目标 .net 版本 3.5)

】如何将托管c++库导入C#应用程序(目标.net版本3.5)【英文标题】:Howtoimportamanagedc++librarytoC#app(target.netversion3.5)【发布时间】:2014-06-2311:24:08【问题描述】:我在VisualStudio中创建了一个托管c++库(包装器),它使用了一些非托... 查看详情