我正在使用 OSX Mountain Lion。我刚刚使用 boost 网站提供的说明下载、解压并构建了 boost 1.52.0:http://www.boost.org/doc/libs/1_52_0/more/getting_started/unix-variants.html .我将默认安装前缀保留在 /usr/local
中,这意味着库安装在 /usr/local/lib
中,头文件在 /usr 中/本地/包括
。我已验证库和 header 存在并且最近已修改。
我正在尝试编译此处的 boost 异步 I/O 示例:http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/tutorial/tuttimer5/src.html (来源)。
这是我的编译命令:
g++ -Wall -c -g -I/usr/local/include src/test1.cpp -o src/test1.o
其中 src/test1.cpp 是示例源文件。这是我的链接命令(和错误):
g++ -Wall -L/usr/local/lib -lboost_thread -lboost_system src/test1.o -o bin/test1
Undefined symbols for architecture x86_64:
"boost::thread::~thread()", referenced from:
_main in test1.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
我尝试过同时使用 Apple 的 clang++ 4.0 和 g++ 4.6.0。我从两个程序中得到相同的 undefined symbol 错误。
其他人似乎也无法编译此代码示例。我知道这个问题:C++ / Boost: Undefined Symbols in example?还有这个:Linker error when compiling boost.asio example .但是,这些问题中的每一个似乎都已通过向命令行添加适当的开关(-lboost_thread 和 -lboost_system)得到解决。我已经有了那些。我也试过添加 -lpthread 但没有成功。
感谢您花时间看我的问题!任何帮助表示赞赏。 :)
最佳答案
刚遇到同样的问题,我发现恢复到 Boost 1.49 可以解决问题。 Boost 1.49 的下载链接在这里:
http://www.boost.org/users/history/version_1_49_0.html
在安装 1.49 之前,我通过删除 /usr/local/include/boost
和 /usr/local/lib/*boost*
删除了 1.52。不确定 1.49 和 1.52 之间发生了什么变化导致了这个问题,或者 Boost 1.50 或 1.51 是否会起作用。
关于c++ - Boost线程析构函数 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13833657/