因此,我正在努力想要找出这一个。这是我的基本设置:Boost :: OSX上的线程链接错误?
我正在编译一个共享库与一堆的核心功能,使用了很多提升的东西。我们将称这个库为libpf_core.so。它与boost静态库,特别是python,系统,文件系统,线程和program_options库链接。这一切都顺其自然。
现在,我有一个名为test_socketio的测试程序,它被编译到一个共享库中(它在运行时作为插件加载)。它使用了boost :: bind和boost :: thread等一些增强的东西,并且它再次链接到libpf_core.so(其中包含增强库,请记住)。
当我去,虽然编译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。需要将我的版本的头文件放在某处,并确保我的插件首先看到这些头文件。
发布您的解决方案作为答案然后接受它:) – 2010-06-14 14:06:10
错误,你能详细说明你是如何解决它? – easytiger 2014-02-12 10:59:02
现在已经过去4年了,但这听起来像是我用不同于系统版本的boost版本构建了我的核心库。我需要将不同版本的标题放在某处并设置我的包含路径,以便我的插件首先看到它们。 – 2014-02-12 14:49:10