一种发布 C++ 项目可执行文件的简洁方法

Posted

技术标签:

【中文标题】一种发布 C++ 项目可执行文件的简洁方法【英文标题】:A neat way to release C++ project executable 【发布时间】:2020-09-21 13:54:47 【问题描述】:

我正在用 C++ 编写一个使用 CLion 的简单程序,在 Ubuntu 中使用 cmake。

该程序使用 CURL、Qt 和 OpenCV 库,所以我使用 apt 安装了预构建的包。

我写完代码,上传到github,现在我想将当前代码定义为版本1并发布。

我最初的想法是:将程序构建为单个可执行文件并将其作为发行版共享。

但是单纯的复制可执行文件,cmake的构建结果,在其他系统上好像不行;由于图书馆问题。

比如我把可执行文件复制到新安装的-clean ubuntu系统,执行时出现共享库错误,和libcurl一样。

是否有任何巧妙的方法来发布我的程序,让用户可以直接下载并执行它?

谢谢!

【问题讨论】:

您可以创建一个 Ubuntu .deb 软件包文件,其中包括可以自动安装的依赖项列表等内容。或者静态链接。或者做几乎每个 Linux 应用程序都会做的事情:什么都不做,只让用户下载代码并安装依赖项并自己构建。 这可能会有所帮助:https://blog.usejournal.com/creating-debian-packages-cmake-e519a0186e87 【参考方案1】:

如果您想发布适用于 Linux 的可执行文件,您可能会承担大量工作。不仅不同的 Linux 发行版处理打包和依赖管理的方式不同,甚至在同一发行版的不同发行版中也可能存在不一致。

除非您有一个团队与您一起工作,或者您有时间,否则即使支持一个发行版也非常困难。每次发布新版本时,即使是次要版本,您都必须重新构建、重新测试和重新打包。

大多数 Linux 发行版都有简化打包的工具,并且可以生成带有嵌入式依赖信息的包,这让用户的生活更轻松。但是您仍然面临着持续的维护负担。

或者,您可以采用一些大型 Linux 项目采用的方法,并发布静态链接的二进制文件。这通常会产生大量的可执行文件,但仍然不是万无一失的。

如果您的应用程序很好,并且它是具有合理许可的开源应用程序,并且可以从 GitHub 等知名地方轻松获得,那么它可能会被分发维护者采纳。构建一个发行版需要大量的编译和打包,其中大部分是自动化的。因此,添加额外的包,如果它们构建干净,对于发行版维护者来说并不是一件大事。

否则,我认为最好的办法就是发布源代码,并记录它的依赖关系。理想情况下,如果缺少依赖项,构建将彻底失败并发出明确的警告——遗憾的是,许多 Linux 应用程序(包括我自己的)都达不到这个目标。

【讨论】:

以上是关于一种发布 C++ 项目可执行文件的简洁方法的主要内容,如果未能解决你的问题,请参考以下文章

C++的QT项目打包成独立可执行和发布的exe文件

C++的QT项目打包成独立可执行和发布的exe文件

vsinstr.exe 检测大型可执行文件的性能

C++ Windows - 通过可执行文件路径获取进程的 PID

如何最好地将 C++/Cython 项目编译成可执行文件?

将迄今为止作为独立可执行文件开发的 C++ 项目转换为 DLL