【问题标题】:Distributing with Boost Library?与 Boost 库一起分发?
【发布时间】:2010-11-27 13:53:36
【问题描述】:

我对使用 boost 很陌生,我似乎在任何地方都找不到关于如何在使用 boost 时分发应用程序的文档?

许多库都是共享库,我不希望我的用户安装 boost,我只使用一个库(正则表达式),所以有没有一种简单的方法可以将正则表达式库与我的应用程序打包,而无需编译静态版?

【问题讨论】:

  • 我想为 linux 分发,将来为 windows 分发。我也会保持开源,所以我会提供源代码供用户构建以及预构建的二进制文件
  • 如果您只使用正则表达式,那么您的编译器很可能已经通过 TR1 支持正则表达式。试试#include .
  • 是的,这就是选择它而不是其他不需要构建的正则表达式库的原因之一。虽然如果所有编译器都不完全支持 TR1,我不想赌一把

标签: c++ boost distribution


【解决方案1】:

Linux

对于二进制分发,我建议使用分发的包管理,它应该处理任何依赖关系。 有些商业应用只使用二进制 blob,您需要自己安装一个 boost 版本。

在 linux 上查找库有点困难。如果它们在编译时链接,它不会自动从当前目录加载共享对象(而不是在运行时使用 dlopen 加载)。

您必须使用 LD_LIBRARY_PATH 环境变量或使用 rpath。两者都有它的缺点。

窗口

没有办法包含 dll。通常的做法是把所有东西都放到一个目录里然后压缩起来。

两者

要从源代码构建,无论如何您都需要 boost 源代码,因此无需包含库。

boost 中的大多数库都只是标头,正则表达式不是其中之一。包含此模块的 dll 就足够了。 在 Linux 中,您可以使用以下命令检查您的二进制文件是针对哪些共享库编译的:

ldd binary

【讨论】:

  • 是的,我打算只为与源代码分开的预构建应用程序提供 .so 和 .dll 文件。所以你说它只通过编译的lib文件就可以工作吗?使用我知道的正则表达式,就像你说它不是一个仅头文件,所以我将提供构建的正则表达式库以及源代码
  • 编译的库文件?用户需要所有链接的共享库。对于 Linux,您应该依赖包管理。
  • 对不起,我的意思是提供预构建的正则表达式库,而不是依赖用户来构建它。有了源代码版本,我不必担心,如果用户想要构建它,我会让用户负责获取适当的库。如果仅通过提供 .so 或 .dll 文件就可以正常工作,那么它很好。我听说 boost 有一个工具,它可以提取和查找您的应用正在使用的所有库,有人知道吗?
  • 那么你想知道什么?可以提供 .so 文件。是不是很好的风格?可能不是,您应该对库使用包管理。
  • 在 Linux 上,确实可以依赖包管理器,但是如果 Linux 发行版附带过时的 Boost 版本,而您需要更新的功能怎么办?在这种情况下,分发部分 Boost(而不是依赖包管理器)的问题是有意义的。
猜你喜欢
  • 2011-12-10
  • 1970-01-01
  • 2023-04-07
  • 2021-08-16
  • 1970-01-01
  • 2021-07-12
  • 2017-12-27
  • 1970-01-01
  • 2014-09-06
相关资源
最近更新 更多