gpt4 book ai didi

c++ - 如何在linux上打包c++依赖

转载 作者:太空狗 更新时间:2023-10-29 22:57:14 26 4
gpt4 key购买 nike

我正在使用 cmake 在 Ubuntu 16.04 上开发一个 c++ 程序,使用 g++5 和 clang++-3.8 进行编译。

现在我也想让这个程序在 14.04 上可用,但是因为我使用了很多 c++14 特性,所以我不能只在那个系统上重新编译它。相反,我想问一下是否/如何以一种我可以在目标系统上解压缩文件夹并运行应用程序的方式打包所有依赖项(特别是 c++ 标准库)。

理想情况下,我正在寻找一些可以添加到我的 cmake 构建中的自动化/脚本化解决方案。

奖励问题:
现在,这只是一个简单的命令行程序,我可以轻松地重新编译所有第 3 方依赖项(事实上我这样做了)。然而,从长远来看,我还想移植一个 QT 应用程序。理想情况下,该解决方案也适用于该场景。

最佳答案

您的条件中最糟糕的部分是不兼容的标准库。无论如何,您都必须静态链接它(请参阅对您的回答的评论)。

多个选项:

完全静态链接:

我认为这对您来说是最简单的方法,但它要求您可以构建(或通过任何方式获取)所有静态第三方库。如果您出于某种原因不能这样做,那不是您的选择。

您只需像往常一样构建您的应用程序,然后将其与您需要的所有库静态链接(请参阅您的编译器的文档)。因此,您将获得完全无依赖性的可执行文件,它可以在任何 ABI 兼容系统上运行(您可能需要检查 x86 可执行文件是否在 x86_64 上运行)。

部分静态链接

您可以静态链接所有内容,并动态链接其他内容。因此,您将所有动态库 (*.so) 与您的应用程序一起分发(在 path/to/app/libpath/to/app/文件夹),所以你不依赖于系统库。创建您的 deb 包,将所有文件放入 /opt$HOME/appname 文件夹。您必须加载所有动态库 "by hand"或要求编译器在链接阶段执行此操作(请参阅文档)。

Docker 容器

我不太了解它,但我确切地知道它需要在目标系统上安装 docker(不是你的选择)。

有用的链接:

g++ link options

static linking manual

Finding Dynamic or Shared Libraries

clang也有类似的文档,google一下。

关于c++ - 如何在linux上打包c++依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45320885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com