【发布时间】: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_system、lboost_thread、lpthread、lrt等。
我正在交叉编译,除此之外的一切都工作正常。
这是什么原因造成的?我该如何调查?我被卡住了。
链接器命令是:
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.so或libboost_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