linker - 生成共享库的不同方法
问题描述
我有一个源代码,它依赖于一些 boost 库,如filesystem
, system
, datetime
. 我想创建一个共享库(libapi.so
)。由于这so
将提供给客户,我不希望客户承担对提升的依赖。所以我用谷歌搜索了解决依赖关系的不同方法,我想出了两种方法。
boostfilesystem.a
第一个是从,中提取所有对象boostsystem.a
,boostdatetime.a
使用ar x
并复制到构建目录。现在我可以运行以下命令来生成共享库。
g++ -m32 ../build/*.o -shared -o ../build/lib/libapi.so
第二个是使用--whole_archive
编译器提供的选项。现在命令变成了。
g++ -m32 ../build/*.o -shared -o ../build/lib/libapi.so -Wl,--whole-archive \
../boost/libboost_filesystem.a ../boost/libboost_system.a \
../boost/libboost_datetime.a -Wl,--no-whole-archive
现在这两个命令都生成了共享库,并且测试实用程序似乎正在工作。
- 我想知道这两种方式有什么区别?
- 在 2 个中推荐/首选哪一个来生成共享库?
解决方案
推荐阅读
- python - 自动通过多个路径位置并导出文件名
- typescript - vscode API:每X秒调用一次函数
- gradle - 将属性传递给 Gradle Tooling API ProjectConnection
- wordpress - 监督事件侦听器到 docker 容器中的程序或组的特定列表
- reactjs - 如何将条件样式类添加到 React AsyncTypeahead
- r - 如何将字符串转换为数字以对 R 中的一个单元格中的值求和?
- swift - 比较日期元素返回错误的结果 - Swift
- python - numpy 数组形状更改/扩展
- javascript - AJAX 提交后 HTML 表单重置
- docker - Traefik 2.2 无法通过 TCP 连接到 Docker Swarm API