关于C#:Boost :: Thread在OSX上的链接错误?

Boost::Thread linking error on OSX?

所以我很努力地试图弄清楚这一点。这是我的基本设置:

我正在使用一系列使用大量增强功能的核心功能来编译共享库。我们称该库为libpf_core.so。它与boost静态库链接,特别是python,system,filesystem,thread和program_options库。这一切都如鱼得水。

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

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

1
2
3
4
5
6
7
8
[ 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?在Google上进行搜索时,我看到很多其他人都遇到了此错误,但是似乎没有人提出令人满意的解决方案。

编辑:弄清楚了,OSX在/ usr / local / include中带有boost 1.40。需要将我的boost版本的标头放在某处,并确保我的插件首先看到那些标头。


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


当您将libpf_core.so与静态boost库链接时,它只会获取其实际使用的功能的副本。链接器不会费心地引入库代码中未引用的函数。

您还需要将测试程序链接到boost库。您不能可靠地"链接"链接。