首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使使用-lboost_thread也会增加“未定义的引用”错误

即使使用-lboost_thread也会增加“未定义的引用”错误
EN

Stack Overflow用户
提问于 2017-06-13 04:27:42
回答 0查看 1.7K关注 0票数 0

在尝试使用boost::shared_mutex时,我遇到了一些奇怪的编译器/链接器错误。我在一个运行32位HEL6.2的VM上使用boost v1.61。

导致错误的代码:

hpp文件:

代码语言:javascript
复制
#include <boost/thread/shared_mutex.hpp>

class SharedData
{
public:
  SharedData();
  ~SharedData();

  void packMessage(std::shared_ptr<Message> s);

private:
  // mutex that allows multiple read, single write protection
  boost::shared_mutex m_sharedMutex;
};

cpp文件:

代码语言:javascript
复制
void SharedData::packMessage(std::shared_ptr<Message> s)
{
  // get shared read access
  boost::shared_lock<boost::shared_mutex> lock(m_sharedMutex); // <- this line causes the errors

  // read stuff here
}

make输出:

代码语言:javascript
复制
CMakeFiles/tester.dir/__/src/SharedData/SharedData.cpp.o: In function `boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*)':
/usr/local/include/boost/thread/pthread/thread_data.hpp:195: undefined reference to `boost::detail::get_current_thread_data()'
CMakeFiles/tester.dir/__/src/SharedData/SharedData.cpp.o: In function `boost::condition_variable::wait(boost::unique_lock<boost::mutex>&)':
/usr/local/include/boost/thread/pthread/condition_variable.hpp:81: undefined reference to `boost::this_thread::interruption_point()'
CMakeFiles/tester.dir/__/src/SharedData/SharedData.cpp.o: In function `boost::shared_mutex::lock_shared()':
/usr/local/include/boost/thread/pthread/shared_mutex.hpp:186: undefined reference to `boost::this_thread::disable_interruption::disable_interruption()'
/usr/local/include/boost/thread/pthread/shared_mutex.hpp:193: undefined reference to `boost::this_thread::disable_interruption::~disable_interruption()'
/usr/local/include/boost/thread/pthread/shared_mutex.hpp:193: undefined reference to `boost::this_thread::disable_interruption::~disable_interruption()'
collect2: error: ld returned 1 exit status
make[2]: *** [bin/tester] Error 1

我搜索过的所有地方都说,这些错误意味着我需要链接boost_thread库,我已经在我的cmake文件中这样做了(这个项目中的其他代码都包含了boost_system):

代码语言:javascript
复制
target_link_libraries(${BINARY_NAME} boost_thread boost_system)

但是错误仍然存在。

最初,我使用的是已经安装在我的机器上的boost 1.41库。当我遇到这些错误时,我运行了yum remove boost-devel,然后手动安装了Boost1.61,看看这是否可以纠正错误。是否需要向./bootstrap.sh./b2 install命令添加其他内容?我可以在/usr/local/lib中看到libboost_thread.a,所以我认为这意味着线程库是正确构建的。

对导致这些错误的原因有什么看法吗?谢谢!

编辑:Cmake的日志没有任何有用的东西,但make VERBOSE=1给出了以下输出:

代码语言:javascript
复制
cd /home/craig/dev/myProject/build/test && /usr/bin/cmake -E cmake_link_script CMakeFiles/tester.dir/link.txt --verbose=1
/opt/rh/devtoolset-2/root/usr/bin/c++   -std=c++11 -ggdb -Wall -Werror -fprofile-arcs -ftest-coverage -fPIC -O0 -pedantic    -Wl,--export-dynamic CMakeFiles/tester.dir/utilities/googletest/googletest/src/gtest-all.cc.o CMakeFiles/tester.dir/tester.cpp.o CMakeFiles/tester.dir/SharedData/testSharedData.cpp.o CMakeFiles/tester.dir/Common/testFifo.cpp.o CMakeFiles/tester.dir/Common/testCsu.cpp.o CMakeFiles/tester.dir/Messages/testMessage.cpp.o CMakeFiles/tester.dir/__/src/SharedData/SharedData.cpp.o CMakeFiles/tester.dir/__/src/Common/Fifo.cpp.o CMakeFiles/tester.dir/__/src/Common/Csu.cpp.o  -o ../bin/tester -rdynamic -lboost_system -lpthread 
CMakeFiles/tester.dir/__/src/SharedData/SharedData.cpp.o: In function `boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*)':
/usr/local/include/boost/thread/pthread/thread_data.hpp:195: undefined reference to `boost::detail::get_current_thread_data()'
CMakeFiles/tester.dir/__/src/SharedData/SharedData.cpp.o: In function `boost::condition_variable::wait(boost::unique_lock<boost::mutex>&)':
/usr/local/include/boost/thread/pthread/condition_variable.hpp:81: undefined reference to `boost::this_thread::interruption_point()'
CMakeFiles/tester.dir/__/src/SharedData/SharedData.cpp.o: In function `boost::shared_mutex::lock_shared()':
/usr/local/include/boost/thread/pthread/shared_mutex.hpp:186: undefined reference to `boost::this_thread::disable_interruption::disable_interruption()'
/usr/local/include/boost/thread/pthread/shared_mutex.hpp:193: undefined reference to `boost::this_thread::disable_interruption::~disable_interruption()'
/usr/local/include/boost/thread/pthread/shared_mutex.hpp:193: undefined reference to `boost::this_thread::disable_interruption::~disable_interruption()'
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44508173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档