c++ - 用它需要的所有库编译一个 C++ 程序
问题描述
当我用Visual Studio编译使用openmp库的 C++ 代码时,该程序非常便携——因为它可以在其他装有 Windows 的机器上运行而没有问题。
当我使用适用于 Windows 的Eclipse CDT(oxygen 和 g++ cygwin)编译 C++ 代码时,一般来说,我需要在其他机器上安装正确的运行时库才能运行该程序。我觉得不实用。
基于此:
1)编译包括所有库(g ++和openmp)的代码以在另一个Windows系统中运行的正确方法是什么?
2) 如何在 Eclipse CDT for Windows 中做到这一点?
解决方案
问题不在于编译,而在于分发。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。
推荐阅读
- python - 如何解开具有多个条目的数据框字典?
- go - 找不到嵌套包
- c# - 对聚合表达式进行空检查
- django - 在 Django 管理界面中,有没有办法检查一些列表项并触发将字段内容复制到剪贴板的操作?
- javascript - 不知道如何处理我的项目中的输入
- xamarin - 如何在 Xamarin (Forms) iOS 项目中使用 AirWatch SDK?
- r - For 循环或函数有条件地减去两列的值
- javascript - 从外部样式化嵌套样式组件
- python - Python Web Scraping - html 解析
- c# - 如何重新启动异步方法?取消之前的运行,等待它然后启动它