Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost线程析构函数未定义符号_C++_Boost Asio_Undefined Symbol - Fatal编程技术网

C++ Boost线程析构函数未定义符号

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

我用的是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
其中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