【问题标题】:I installed libboost but can't link to it我安装了 libboost 但无法链接到它
【发布时间】:2012-06-23 15:25:38
【问题描述】:

我已经安装了libboost-devapt-get,它放在/usr/lib中。

/usr/lib$ ls | grep boost
libboost_filesystem.so.1.46.1
libboost_iostreams.so.1.46.1
libboost_serialization.so.1.46.1
libboost_system.so.1.46.1
libboost_thread.so.1.46.1
libboost_wserialization.so.1.46.1

但是当我尝试编译使用boost_thread 的源代码时,我仍然遇到错误。

$ g++ tcp_echo.cpp -o tcp_echo -L/usr/lib -llibboost_thread
/usr/bin/ld: cannot find -lboost_thread
collect2: ld returned 1 exit status
$ g++ tcp_echo.cpp -o tcp_echo -L/usr/lib -lboost_thread
/usr/bin/ld: cannot find -lboost_thread
collect2: ld returned 1 exit status

安装和链接到libboost 的正确方法是什么?

【问题讨论】:

  • 您不需要-L/usr/lib,它会自动添加到库搜索路径中。
  • 您是否尝试在安装后运行ldconfig(以root 身份)?
  • @JoachimPileborg ldconfig 应该由 apt 运行,所以他应该很好。尤其是如果-L 仍然被使用。
  • 你试过重新安装吗?
  • 我注意到的一件事是你没有 libboost_thread.so。您有版本化的 1.46.1 文件,但通常库会创建一个符号链接到带有未修饰名称的版本化副本。可能不是这样,但这是我注意到的一件事。 (这通常由安装程序完成。)

标签: c++ boost linker


【解决方案1】:

我注意到的一件事是您确实没有 libboost_thread.so。你有 版本化的 1.46.1 文件,但通常库会创建一个符号 链接到带有未修饰名称的版本控制副本。那可能不会 不管怎样,但这是我注意到的一件事。 (这通常由 安装程序。)–Omaha

我认为这就是重点。这意味着我以错误的方式安装了libboost。其实我只安装了libboost-dev

sudo apt-get install libboost-dev 

但我该怎么做:

sudo apt-get install libboost-dev libboost1.46-doc libboost-date-time1.46-dev ibboost-filesystem1.46-dev libboost-graph1.46-dev libboost-iostreams1.46-dev libboost-math1.46-dev libboost-program-options1.46-dev libboost-python1.46-dev libboost-random1.46-dev libboost-regex1.46-dev libboost-serialization1.46-dev libboost-signals1.46-dev libboost-system1.46-dev libboost-test1.46-dev libboost-thread1.46-dev libboost-wave1.46-dev

(或者,在我的特殊情况下,至少安装libboost-system1.46-dev libboost-thread1.46-dev

并且一旦你正确安装它们,/usr/lib 中应该有.a.so

/usr/lib$ ls | grep boost
libboost_date_time.a
libboost_date_time-mt.a
libboost_date_time-mt.so
libboost_date_time.so
libboost_date_time.so.1.46.1
libboost_filesystem.a
libboost_filesystem-mt.a
... and so on ...

【讨论】:

  • 过去,Ubuntu 有元包 libboost-dev-all 来安装所有这些。不过,我现在好像找不到了。这是一个可能有帮助的命令行:sudo apt-get install ``apt-cache search libboost | grep -- -dev | grep -v '[12]\.[0-9]' | awk '{ print $1; }'
【解决方案2】:

在 Ubuntu 16.04 中,包名为:libboost-all-dev(不是 libboost-dev-all)

【讨论】:

    【解决方案3】:

    评论框搞砸了此建议的引用,因此我将其发布为获得正确引用的答案。

    过去是,Ubuntu 有元包 libboost-dev-all 来安装所有这些。不过,我现在好像找不到了。这是一个可能有帮助的命令行:

    sudo apt-get install `apt-cache search libboost | \
        grep -- -dev | \
        grep -v '[12]\.[0-9]' | \
        awk '{ print $1; }'`
    

    (取自https://github.com/imvu-open/istatd/文件 install-boost-dev.sh )

    【讨论】:

    • 对于其他人——我遇到了 OP 的问题,这个命令确实立即解决了它。 Ubuntu 15.10。顺便说一句,“libboost-dev”似乎并不意味着缺少“libboost-dev-all”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多