人们如何分发对boost模块有二进制依赖的boost程序
How do people distrubute boost programs which have binary dependencies on boost modules?
我有一个非常基本的客户端/服务器项目,使用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应用程序,我将如何改变?
我是一个全新的发布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库有:
- 提振。文件系统
- 提振。GraphParallel
- 提振。iostream
- 提振。MPI
- 提振。ProgramOptions
- 提振。Python(参见Boost。Python构建文档(在构建和安装之前)
- 提振。Regex
- 提振。序列化
- 提振。信号
- 提振。系统
- 提振。线程
提振。波
一些库有可选的单独编译的二进制文件:
提振。DateTime有一个二进制组件,只有当你使用它的to_string/from_string或序列化特性,或者你的目标是Visual c++ 6时,才需要它。
- 提振。Graph还有一个二进制组件,只有在打算解析GraphViz文件时才需要它。*提高。Math有二进制组件用于TR1和C99 cmath函数。
- 提振。Random有一个二进制组件,只有当你使用random_device时才需要。
- 提振。Test可以在"仅头文件"或"单独编译"模式下使用,但建议在严肃使用时单独编译。
或者,你可以链接你的程序与静态(.a) Boost库而不是共享(.so),在这种情况下,将有没有运行时依赖。
或者您可以根据需要混合/匹配共享/统计。
选择在你。
查看Boost文档:b2静态和共享库如前所述,您需要使用静态选项编译boost,例如
bjam install——toolset=msvc variant=release link=static threading=multi runtime-link=static
你可以在这个线程中获得更多信息我有静态或动态增强库吗?
需要注意的是,如果你在你的可执行文件上做一个ldd,你可能会注意到一些对gcc/libc库的运行时依赖,即使你在静态模式下编译它。这意味着您的客户机平台必须安装这些库。90%的情况下,它们都在那里,但当您使用最新版本的编译器而客户端使用较旧的编译器时,情况可能会更复杂。
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 有条件地使用 Boost Python 添加模块
- boost.python模块扩展生成SIGSEGV
- 使用Boost Python的Python模块是空的?
- 如何为"boost-like"多组件库编写 cmake 模块?
- 使用 Boost.Python 创建的 Python 模块不会被导入
- Boost.Python - ImportError:动态模块未定义模块导出函数(PyInit_example)
- 导入 Boost Python 模块 (function_impl_base9max_arityEv) 时出错
- 我应该把Boost.Python的.so文件放在哪里,这样我就可以把它作为一个模块导入,以及我如何将它与Python 2
- Boost github版本不包含子模块
- 如何使用boost.python跨模块使用类
- 我可以编译boost.python模块而没有BJAM
- 如何在插件 [模块] 之间共享 boost::asio::io_service
- 如何从python模块(boost.python)导入类
- Qt有与Boost的分配模块等效的东西吗?
- Boost python/从线程导入模块需要ReleaseLock().为什么
- 如何"install"由Boost.Python制作的自定义Python模块
- boost是否需要特殊的python模块才能在linux中构建
- 如何在Python中编译、创建共享库和导入c++ boost模块
- 人们如何分发对boost模块有二进制依赖的boost程序