【问题标题】:Deploying Linux c++ distributable app with third-party libraries使用第三方库部署 Linux c++ 可分发应用程序
【发布时间】:2017-02-18 07:06:44
【问题描述】:

我正在开发一个跨平台的 c++ 应用程序,目前我正在处理让它在 linux 下工作的问题,这是一个我几乎没有经验的领域。这个应用程序使用 Poco 和 Boost 等第三方库。我正在开发一个 Ubuntu 桌面版本,我在其中动态构建它们,它们的头文件包含在 usr/local/include 中,而 .so 文件在 usr/本地/库。
如果我想分发这个应用程序,只需打包我的源代码(可执行文件)+第三方库的头文件等文件就足够了,或者应用程序的接收者也应该在他的机器上安装这些库要执行的应用程序?

【问题讨论】:

  • 为什么您认为您需要将 cpp 和头文件与您的应用程序二进制文件一起分发?
  • 首先,阅读所有使用的库的许可证。
  • 作为一个在几个 Linux 发行版中打包了这些东西的人说话:只打包你自己的代码,然后提供明确的文档,必须安装哪些依赖项才能编译和安装你自己的warez。如果您提供自己的 RPM 规范文件,或者任何 APT 需要做的等效文件,作为您自己的软件包的一部分,则免费提供布朗尼积分。
  • @IInspectable cpp 和 h 文件写错了我的意思是可执行文件。我会改正的
  • @deviantfan 关于库许可证是 MIT 和 Boost 软件许可证,据我所知,它们允许动态链接分发

标签: c++ linux libraries


【解决方案1】:

检查您的许可证以获取第 3 方代码。如果是 GPL,请在您的下载中包含源代码 tarball。这是最简单的,因为它不会让您以后对任何事情负责。否则,如果 Debian / Ubuntu 六年后将其从存档镜像中删除,您仍然有责任为任何需要它的人提供源代码。

然后考虑将您的代码制作成独立的 Linux 应用程序。为此,您可以将所需的所有共享库放入目录中。您选择在哪里定义边界。您可能决定可以依赖系统的 C 库、OpenGL、SDL 等,而无需捆绑这些。

然后创建一个使用$0 的shell 脚本(即sh 变量,它是脚本的全名)来找出它从哪里运行。将LD_LIBRARY_PATH 设置为dirname "$0" 然后exec realprogram $@

如果您这样做,您的代码可以在很长一段时间内在系统上运行。看看 Quake 3 是如何为 Linux 打包的,它就是这样完成的。

【讨论】:

  • 所以,如果我在我的示例中对这种方式有误,请纠正我,可以绕过 usr/local/include 的读取,因为我在 IDE 或 Makefile 示例中都找不到我的方法发现从构建过程中排除此文件夹
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 2018-09-02
  • 1970-01-01
  • 2010-11-23
相关资源
最近更新 更多