C++ Boost线程析构函数未定义符号
我用的是OSX山狮。我刚刚下载、解包并使用boost网站提供的说明构建了boost 1.52.0:。我将默认安装前缀保留在C++ Boost线程析构函数未定义符号,c++,boost-asio,undefined-symbol,C++,Boost Asio,Undefined Symbol,我用的是OSX山狮。我刚刚下载、解包并使用boost网站提供的说明构建了boost 1.52.0:。我将默认安装前缀保留在/usr/local,这意味着库安装在/usr/local/lib中,头文件安装在/usr/local/include中。我已经验证了库和头是否存在,并且最近进行了修改 我正试图编译这里的boost异步I/O示例:(源代码) 这是我的编译命令: g++ -Wall -c -g -I/usr/local/include src/test1.cpp -o src/test1.o
/usr/local
,这意味着库安装在/usr/local/lib
中,头文件安装在/usr/local/include
中。我已经验证了库和头是否存在,并且最近进行了修改
我正试图编译这里的boost异步I/O示例:(源代码)
这是我的编译命令:
g++ -Wall -c -g -I/usr/local/include src/test1.cpp -o src/test1.o
其中src/test1.cpp是示例源文件。这是我的链接命令(和错误):
我尝试过使用苹果的clang++4.0和g++4.6.0。我从两个程序中得到相同的未定义符号错误
其他人似乎也在编译此代码示例时遇到了问题。我知道这个问题:还有这个:。然而,通过在命令行中添加适当的开关(-lboost_线程和-lboost_系统),这些问题似乎都得到了解决。我已经有了。我也尝试过在没有运气的情况下添加-lpthread
谢谢你花时间看我的问题!感谢您的帮助。:) 将最后链接的库放在命令行上
GNU链接器使用某种依赖项的反向查找,因此,如果文件A依赖于库B,那么在命令行中,B应该位于A之后。刚刚遇到了同样的问题,我发现恢复到Boost 1.49可以解决这个问题。Boost 1.49的下载链接如下:
在安装1.49之前,我删除了
/usr/local/include/boost
和/usr/local/lib/*boost*
,删除了1.52。不确定1.49和1.52之间的变化是什么导致了此问题,也不确定Boost 1.50或1.51是否有效 谢谢你的意见。我将这些库移到linker命令的末尾,并对它们重新排序(三个参数的六个不同顺序-lpthread、-lboost_-thread和-lboost_-system),但都没有用。我每次都收到同样的错误。也许这是相关的:当我添加标志-static
时,我得到一个不同的错误:ld:library not found for-lcrt0.o
。我从来没有在命令行中提到过那个文件。我可以确认每个库的.a和.dylib版本都安装在/usr/local/lib
下。
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