首页 > 解决方案 > 用它需要的所有库编译一个 C++ 程序

问题描述

当我用Visual Studio编译使用openmp库的 C++ 代码时,该程序非常便携——因为它可以在其他装有 Windows 的机器上运行而没有问题。

当我使用适用于 Windows 的Eclipse CDT(oxygen 和 g++ cygwin)编译 C++ 代码时,一般来说,我需要在其他机器上安装正确的运行时库才能运行该程序。我觉得不实用。

基于此:

1)编译包括所有库(g ++和openmp)的代码以在另一个Windows系统中运行的正确方法是什么?

2) 如何在 Eclipse CDT for Windows 中做到这一点?

标签: c++openmpeclipse-cdt

解决方案


问题不在于编译,而在于分发。Windows 和 Windows 工具链打算使用动态链接。现在,如果创建的软件依赖于特定版本的运行时,包括并行构建,则只有在完全安装了该构建时才能运行它们。可能存在多个相同库版本的构建,它们是使用并行 (SxS) 机制获取的。

在 Linux 平台上,这个问题是通过包管理器和依赖关系解决的。在 Windows 上,您必须创建一个安装程序,该安装程序将包含或能够下载正确版本的库。安装程序也可以对操作系统设置进行适当的更改,并注册它们,以备将来回滚。

请注意,运行时库具有无法分发的调试变体,并且软件的调试版本必须仅在开发人员系统上运行。

随处可见且无需安装即可运行的“便携式”应用程序具有不依赖于 SxS 运行时库的特殊状态。据我所知,cygwin 和 mingw32 允许创建这样的,mingw 的 64 位项目有问题。但它们仍然依赖于特定版本的系统 .dll,并且在不匹配的情况下可能会中断或发生故障。

即使在这种情况下,您仍然需要一些来自 mingw、cygwin、Qt 的 .dll,无论您使用什么以及不是操作系统的一部分,都将它们放置在程序可以访问它们的地方。可以是包含可执行文件的文件夹。由于代码膨胀,静态链接成为过去台式机的噱头——动态库的大小很容易达到几十兆字节。

最后:您不用 Visual Studio 或 Eclipse CDT 编译任何东西。两者都旨在使用各种编译器,它是 juse 环境。您必须指定 normal;y,您的 IDE 使用什么编译器,而不是您使用什么 IDE 来运行 ot。


推荐阅读