【问题标题】:How to know when to use the .a or .so when linking to Boost?链接到 Boost 时如何知道何时使用 .a 或 .so?
【发布时间】:2009-10-13 18:42:38
【问题描述】:

我想为我正在处理的项目试用 Boost::Serialization 库。我也在尝试习惯在 Linux 中编程。我在其默认位置设置了 boost。我尝试使用他们提供的命令行参数编译他们提供的测试文件here,它工作正常。在此示例中,他们使用 .a 文件。

然后我转到序列化页面并尝试运行serialization demos 之一。我运行了基本相同的命令,除了我换掉了文件名并链接到 libboost_serialization.a 而不是 libboost_regex.a,但我得到了一堆错误。在使用了不同的选项并仔细检查了目录之后,我终于通过将 .a 替换为 .so 文件来使其工作。

仅供参考,最终对我有用的是:

g++ /usr/local/lib/libboost_serialization.so sertest.cpp -o sertest 

为什么我在一个示例中链接到 .a 文件,而在另一个示例中我必须链接到 .so 文件?

【问题讨论】:

  • 您不应该使用-l 选项,也许使用-L 作为库搜索路径,而不是直接在命令行中指定库吗?
  • 在给出的示例中,他们使用 $ c++ -I path/to/boost_1_40_0 example.cpp -o example \ ~/boost/stage/lib/libboost_regex-gcc34-mt-d-1_36.a 所以我也这样做了。

标签: linux boost g++ static-libraries


【解决方案1】:

因为在静态链接时,指定库和目标文件的顺序很重要。具体来说,必须在使用其中符号的目标文件之后提及库。

【讨论】:

  • 啊,谢谢,这一定是造成我问题的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2011-04-16
  • 1970-01-01
  • 2021-12-09
相关资源
最近更新 更多