【发布时间】:2014-01-27 19:35:08
【问题描述】:
我正在尝试将多线程添加到我的库中,因此我正在为我的库创建一个线程执行器。为此,我使用了 boost 线程。
这是我在运行链接到库的测试用例时遇到的错误:
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 中定义的符号。
【问题讨论】:
标签: c++ shared-libraries boost-thread libtool