【发布时间】:2015-12-19 04:24:56
【问题描述】:
谁能解释一下 C++ 库的版本控制和分布
- GCC 库 (libgcc, libstdc++,..?)
- Microsoft Visual C++ 运行时库(6.0、2005、2008、2010、2012、2013、2015 ......)
由于我对 GCC 编程的了解有限,我从未见过 C++ 运行时库与程序一起分发。 MS Windows 程序经常出现这种情况。
相对较旧的 linux 系统能否运行较新的 C++14 程序(在较新的系统上编译然后复制到旧系统)?
GCC 程序员是否将运行时库与程序一起分发?如果不是,为什么 Windows 程序分发它们? GCC 发行版如何确保 C++ 程序在安装时始终运行?
Qt 等框架怎么样,Qt 如何处理 Linux 和 Windows 上的版本控制和分发? Qt 是否也为不同版本分发运行时?
可能与平台、Linux 的设计方式与 Windows 的设计方式有关。
GCC 和 MS Windows 采用的方法有什么根本不同?
【问题讨论】:
-
“根本区别”是 gcc 试图保留版本之间的二进制接口。 Microsoft 在每个版本中都提供了一组全新的库。这两种方法都有其优点和局限性。例如,引入破坏界面的更改有多难?用户需要多久安装一次新版本?
-
GCC 有很多错误,我相信其中很多都处于接口级别,并且通常需要更改接口来解决它们,您将如何“保留”版本之间的二进制接口。
-
@BoPersson 如果我没记错的话,微软和 linux 的方法比这更相似。 MSVC 运行时 DLL 也有不同的版本,具有相同的接口和相同的“发行版”,并随补丁一起分发。而且linux还有一个“发布”版本,可以打破界面,系统中有多个SO文件。
-
@user1 通常在 linux 上,您的二进制文件将无法工作,因为不存在正确的运行时,并且安装它并非易事。在 Windows 上,如果您安装了正确的运行时可再发行组件,则可以使其工作。
-
@rubenvb 当然,这就是向后兼容性。总的来说,如果您在较旧版本的发行版上编译二进制文件并尝试在较新的发行版上运行它,那么一切都会奏效。 Windows 也是如此 - 将二进制文件编译到较旧的运行时,较新的 windows 版本将安装旧运行时,或者您可以轻松安装它。不过,这里的问题是在旧系统上运行更新的二进制文件。在这种情况下,旧系统上不存在新运行时,在旧系统上安装新运行时并非易事。
标签: c++ c qt visual-c++ gcc