【问题标题】:Boost Thread Destructor Undefined SymbolBoost 线程析构函数未定义符号
【发布时间】:2012-12-12 05:54:18
【问题描述】:

我正在使用 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/local/include。我已经验证了库和头文件在那里并且最近被修改了。

我正在尝试编译此处的 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。我从两个程序中得到相同的未定义符号错误。

其他人似乎也无法编译此代码示例。我知道这个问题:C++ / Boost: Undefined Symbols in example? 和这个问题:Linker error when compiling boost.asio example。但是,这些问题中的每一个似乎都已通过在命令行中添加适当的开关(-lboost_thread 和 -lboost_system)得到解决。我已经有了这些。我也试过添加 -lpthread 没有运气。

感谢您花时间查看我的问题!任何帮助表示赞赏。 :)

【问题讨论】:

    标签: c++ boost-asio undefined-symbol


    【解决方案1】:

    刚遇到同样的问题,我发现恢复到 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 是否可以工作。

    【讨论】:

      【解决方案2】:

      把你用last链接的库放在命令行上。

      GNU 链接器使用某种反向查找依赖项,因此如果文件 A 依赖于库 B,则 B 应该在命令行上 A 之后。

      【讨论】:

      • 感谢您的意见。我将库移动到链接器命令的末尾,并对它们重新排序(三个参数 -lpthread、-lboost_thread 和 -lboost_system 的所有六个不同顺序),但无济于事。我每次都收到同样的错误。也许这是相关的:当我添加标志 -static 时,我得到一个不同的错误:ld: library not found for -lcrt0.o。我从来没有在命令行上提到过那个文件。我可以确认每个库的 .a 和 .dylib 版本都安装在 /usr/local/lib 下。
      猜你喜欢
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 2015-06-03
      相关资源
      最近更新 更多