首页 > 解决方案 > 生成共享库的不同方法

问题描述

我有一个源代码,它依赖于一些 boost 库,如filesystem, system, datetime. 我想创建一个共享库(libapi.so)。由于这so将提供给客户,我不希望客户承担对提升的依赖。所以我用谷歌搜索了解决依赖关系的不同方法,我想出了两种方法。

boostfilesystem.a第一个是从,中提取所有对象boostsystem.aboostdatetime.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

现在这两个命令都生成了共享库,并且测试实用程序似乎正在工作。

  1. 我想知道这两种方式有什么区别?
  2. 在 2 个中推荐/首选哪一个来生成共享库?

标签: linkerg++shared-librariesarchiveunix-ar

解决方案


推荐阅读