【问题标题】:Linking to Boost thread library fails链接到 Boost 线程库失败
【发布时间】:2013-05-02 01:05:35
【问题描述】:

我对 Boost 1.52.0 有一个严重的问题。

在 Eclipse 中,我总是得到:

boost/thread/detail/thread.hpp:223: undefined reference to `boost::thread::start_thread()

当然我在链接库设置中使用lboost_systemlboost_threadlpthreadlrt等。

我正在交叉编译,除此之外的一切都工作正常。

这是什么原因造成的?我该如何调查?我被卡住了。

链接器命令是:

arm-linux-gnueabihf-g++ -L"libs" -L"/usr/arm-linux-gnueabihf/lib" -o "Logics" ./src/Logics_all.o -lpthread -lsqlite3 -lssl -lcrypto -lrt -lboost_system -lboost_thread

如果我跑步:

nm libboost_thread.so | grep start_thread

我只有:

0000b3f0 T _ZN5boost6thread21start_thread_noexceptERKNS_17thread_attributesE
0000b4b0 T _ZN5boost6thread21start_thread_noexceptEv

谢谢。

【问题讨论】:

  • 应该是boost_system,而不是lboost_system。需要使用-lboost_system 调用的是GCC(但同样,不是lboost_system),这意味着它将在指定的库搜索路径中查找libboost_system.solibboost_system.a。显示 Eclipse 实际调用 GCC 的命令行。
  • 实际命令是:arm-linux-gnueabihf-g++ -L"libs" -L"/usr/arm-linux-gnueabihf/lib" -o "Logics" ./src/Logics_all.o -lpthread -lsqlite3 -lssl -lcrypto -lrt -lboost_system -lboost_thread
  • boost_thread 在哪里?
  • 在 -L 选项指向的 libs 文件夹中。请注意,如果我重命名 libboost_thread.so,它会给出另一个错误(lib not found-like)
  • 运行nm libboost_thread.so 并查看boost::thread::start_thread() 符号是否存在。

标签: c++ linux eclipse multithreading boost


【解决方案1】:

终于成功了,我下载了整个boost库并重建了一切。

现在它编译没有任何问题。

谢谢你们俩。

【讨论】:

  • 我也有类似的问题。所有问题的答案是安装 sudo apt-get install libboost-all-dev 然后在你的 IDE Linker 中使用 boost_thread。这对我有用。
猜你喜欢
  • 2017-05-14
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多