我试图将多线程添加到我的库中,所以我正在为我的库创建线程执行程序。为此,我使用了增强线程。

这是运行链接到库的测试用例时遇到的错误:

symbol lookup error: libmylibexample.so.0: undefined symbol: _ZTVN5boost6detail16thread_data_baseE

这是导致错误的共享库中的代码行:
MyNameSpace::Producer producer = MyNameSpace::Producer();
threads.create_thread(boost::bind(&MyNameSpace::Producer::run, &producer));

我正在使用autotools和libtool编译该库。该代码可以很好地编译。然后,我创建一个尝试引用该库的测试用例。这是用于编译测试用例的编译顺序:
g++ -I.  -I../include -g -O2 -MT runTest-runTest.o -MD -MP -MF .deps/runTest-runTest.Tpo -c -o runTest-runTest.o `test -f 'runTest.cc' || echo './'`runTest.cc

这是我的链接阶段:
mv -f .deps/runTest-runTest.Tpo     .deps/runTest-runTest.Po

/bin/bash ../libtool --tag=CXX   --mode=link g++  -g -O2 ../libmylibexample/libmylibexample.la   -o runTest runTest-runTest.o -lboost_system -lboost_filesystem -lboost_regex -lboost_thread-mt -lfftw3 -ltiff

libtool: link: g++ -g -O2 -o .libs/runTest runTest-runTest.o  ../libmylibexample/.libs/libmylibexample.so -lboost_system -lboost_filesystem -lboost_regex -lboost_thread-mt -lfftw3 /usr/lib/x86_64-linux-gnu/libtiff.so

我的一位同事建议初始化一些与线程相关的boost模板,以帮助共享库从boost_thread库中加载符号。我并不完全确定执行此操作的最佳方法,如果这是使事情变得正确的正确方法。

总结一下:该错误似乎涉及无法从我的共享库中加载libboost_thread中定义的符号。

最佳答案

如错误所示,您需要将libmylibexamplelibboost_thread链接。

关于访问Boost绑定(bind)时共享库中的C++符号查找错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21389982/

10-11 21:02