OSX上的Boost :: Thread链接错误?

时间:2010-06-05 19:01:41

标签: c++ macos boost

所以我很想搞清楚这一点。这是我的基本设置:

我正在编译一个共享库,其中包含许多使用大量增强功能的核心功能。我们将此库称为libpf_core.so。它与boost静态库链接,特别是python,系统,文件系统,线程和program_options库。这一切都顺其自然。

现在,我有一个名为test_socketio的测试程序,它被编译成一个共享库(它在运行时作为插件加载)。它使用了诸如boost :: bind和boost :: thread之类的一些提升函数,并且它再次链接了libpf_core.so(其中包含了包含的boost库)。

当我去编译test_socketio时,在我的所有插件中,它给了我一个链接错误:

[ Building test_socketio ]
g++ -c -pg -g -O0  -I/usr/local/include -I../include test_socketio.cc -o test_socketio.o
g++ -shared test_socketio.o -lpy_core  -o test_socketio.so
Undefined symbols:
  "boost::lock_error::lock_error()", referenced from:
      boost::unique_lock<boost::mutex>::lock()   in test_socketio.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

我疯狂地想弄清楚为什么会这样。我已经尝试将boost :: thread明确地链接到插件中无济于事,尝试确保我使用与链接到libpf_core.so的库相关联的boost头,以防出现冲突。

OSX是否有关于提升的具体内容我缺少?在我搜索谷歌时,我看到其他一些人得到了这个错误,但似乎没有人提出一个令人满意的解决方案。

编辑:想出来,OSX在/ usr / local / include中带有boost 1.40。需要在某处为我的boost版本添加标题,并确保我的插件首先看到它们。

2 个答案:

答案 0 :(得分:2)

您需要链接到libboost_thread。添加-lboost_thread开关。

答案 1 :(得分:0)

当你将libpf_core.so链接到静态boost库时,它只会获得它实际使用的函数的副本。链接器无需提取库中代码未引用的函数。

您还需要将测试程序与boost库链接起来。你无法可靠地“链接”这些联系。