gpt4 book ai didi

c++ - 人们如何分发对 boost 模块具有二进制依赖性的 boost 程序?

转载 作者:太空狗 更新时间:2023-10-29 21:43:13 26 4
gpt4 key购买 nike

我有一个非常基本的客户端/服务器项目,它使用 boost::asio。它生成两个可执行文件,一个客户端和一个服务器。

当我运行客户端时,我得到以下信息:

./client: error while loading shared libraries: 
libboost_system.so.1.55.0: cannot open shared object
file: No such file or directory

这意味着该程序需要在运行时动态加载 boost_system 二进制文件。这是有道理的,因为 boost_asio 的一个依赖项是 boost_system

这对于轻松将我的应用程序分发给最终用户意味着什么

1) 我是否只是将 boost_system 二进制文件的开发版本弹出到我的系统中,在本例中为 libboost_system.so.1.55.0?我如何确保当用户运行客户端时,它会找到动态存档?显然,在我的系统上,即使安装了 boost,它仍然找不到存档。

2) 我在 Linux 上构建,因此我有 .so 二进制文件。如果我尝试使用 mingw-w64 交叉编译我的 Windows 应用程序,#1 会发生什么变化?

我是分发 C++ 程序和使用动态/共享库的新手。

当我静态编译时,我收到以下警告:

Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

最佳答案

建议:

1) 如果您使用共享库,您肯定需要将您的程序实际单独使用的那些库包含在您的可执行文件中。

2) 这是 Boost 库的列表。您的程序将只需要一个子集:

http://www.boost.org/doc/libs/1_49_0/more/getting_started/unix-variants.html

唯一必须单独构建的 Boost 库是:

  • Boost.Filesystem
  • Boost.GraphParallel
  • Boost.IOStreams
  • boost .MPI
  • Boost.ProgramOptions
  • Boost.Python(在构建和安装之前请参阅 Boost.Python 构建文档)
  • Boost.Regex
  • boost .序列化
  • boost 信号
  • boost 系统
  • Boost.Thread
  • Boost.Wave

    一些库有可选的单独编译的二进制文件:

  • Boost.DateTime 有一个二进制组件,只有当您使用它的 to_string/from_string 或序列化功能,或者如果您的目标是 Visual C++ 6.x 或 Borland 时,才需要它。

    <
  • Boost.Graph 还有一个二进制组件,仅当您打算解析 GraphViz 文件时才需要它。 * Boost.Math 具有用于 TR1 和 C99 cmath 函数的二进制组件。
  • Boost.Random 有一个二进制组件,只有在您使用 random_device 时才需要它。
  • Boost.Test 可以在“header-only”或“separately compiled”模式下使用,尽管对于严肃的使用,建议单独编译。

或者,您可以将您的程序与静态 (.a) Boost 库而不是共享 (.so) 链接,在这种情况下,没有运行时依赖性。

或者您可以根据需要混合/匹配 shared/statis。

选择权在你。

查看 Boost 文档:b2 Static and Shared libraries

关于c++ - 人们如何分发对 boost 模块具有二进制依赖性的 boost 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460725/

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