我在这里使用指南构建了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库没有正确构建?
答案 0 :(得分:1)
有两个主要选项用于链接。
首先是-L
选项,它添加了一个目录来搜索库。
但是,链接器不知道自动链接链接的库,它不会通过所有可能的库找到匹配的库。这就是第二个选项的来源:-l
(小写L)选项,它告诉链接器链接到特定的库。
用-l
指定的库只是库名,而不是完整的文件名,链接器使用-L
添加的路径来查找它们。
对于使用Boost计时器库的情况,库名称应为boost_timer
,因此您需要在链接时添加选项-lboost_timer
。