关于这个主题有许多主题,但我尝试了一些解决方案,似乎没有任何工作。
如果我使用以下命令安装boost:
brew install booost --c++11
并尝试编译以下程序tut1.cpp:
#include <iostream>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
int main(int argc, char* argv[])
{
if (argc < 2)
{
std::cout << "Usage: tut1 path\n";
return 1;
}
std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
return 0;
}
使用
clang -I /usr/local/Cellar/boost/1.55.0_1/include/ -L /usr/local/Cellar/boost/1.55.0_1/lib/ tut1.cpp
并且它失败了:
Undefined symbols for architecture x86_64:
"boost::filesystem::path::codecvt()", referenced from:
boost::filesystem::path::path<char*>(char* const&, boost::enable_if<boost::filesystem::path_traits::is_pathable<boost::decay<char*>::type>, void>::type*) in tut1-6a2087.o
...
...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
链接似乎是问题,因为如果我调用-c选项,则会创建目标文件。
任何想法到底是怎么回事?
答案 0 :(得分:3)
您希望链接到boost文件系统和boost系统:
-lboost_filesystem -lboost_system
所以完整的编译命令是:
clang++ -I /usr/local/opt/boost/include -L /usr/local/opt/boost/lib tut1.cpp -lboost_filesystem -lboost_system