链接错误Boost库

时间:2017-11-07 12:52:18

标签: c++ macos boost linker-errors

我在这里使用指南构建了BOOST库:http://www.boost.org/doc/libs/1_65_1/more/getting_started/unix-variants.html 然后我想编译以下代码:

#include <boost/timer/timer.hpp>
#include <cmath>

int main()
{
  boost::timer::auto_cpu_timer t;

  for (long i = 0; i < 100000000; ++i)
    std::sqrt(123.456L); // burn some time

  return 0;
}

我在终端发出了以下命令

$ c++ -o program main.cpp -I /Users/miszo97/Desktop/boost_1_65_0 -L /Users/miszo97/Desktop/boost_1_65_0/stage/lib

然后它产生了

Undefined symbols for architecture x86_64:
  "boost::timer::auto_cpu_timer::auto_cpu_timer(short)", referenced from:
      _main in main-a716e4.o
  "boost::timer::auto_cpu_timer::~auto_cpu_timer()", referenced from:
      _main in main-a716e4.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我猜连接出了问题。也许单独编译的Boost库没有正确构建?

1 个答案:

答案 0 :(得分:1)

两个主要选项用于链接。

首先是-L选项,它添加了一个目录来搜索库。

但是,链接器不知道自动链接链接的库,它不会通过所有可能的库找到匹配的库。这就是第二个选项的来源:-l(小写L)选项,它告诉链接器链接到特定的库。

-l指定的库只是库名,而不是完整的文件名,链接器使用-L添加的路径来查找它们。

对于使用Boost计时器库的情况,库名称应为boost_timer,因此您需要在链接时添加选项-lboost_timer