这是我关于SO的第一个问题。这是:
我试图在Xcode 8的C ++项目中使用boost库 - 特别是文件系统部分。
Apple Mach-O Linker (ld) Error Group
"boost::filesystem::detail::dir_itr_close(void*&, void*&)", referenced
from:
"boost::filesystem::detail::directory_iterator_construct(boost::filesystem::directory_iterator&, boost::filesystem::path const&, boost::system::error_code*)", referenced from:
"boost::filesystem::detail::directory_iterator_increment(boost::filesystem::directory_iterator&, boost::system::error_code*)", referenced from:
"boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)", referenced from:
"boost::system::system_category()", referenced from:
"boost::system::generic_category()", referenced from:
clang: error: linker command failed with exit code 1 (use -v to see invocation)
int main(int argc, char *argv[])
{
std::string dir_path = "foo/bar";
if ( !boost::filesystem::exists( dir_path ) ) return false;
boost::filesystem::directory_iterator end_itr; // default construction
yields past-the-end
for ( boost::filesystem::directory_iterator itr( dir_path );
itr != end_itr;
++itr )
{
std::cout << itr->path();
}
return 0;
}
brew install boost --build-from-source --c++11
。我读到传递此--c++11
标志的地方应该修复它,并且--build-from-source
是必需的,以便标志实际传递给b2编译器。 #include <boost/filesystem.hpp>
在我的项目中。/usr/local/include
。 (还尝试在那里添加/usr/local/include/boost
和/usr/local/include/boost/system
,但无效。另外,在我的任何标头搜索路径上设置递归选项会让Xcode吓坏。)/usr/local/lib
。-lboost_system -lboost_filesystem
。 (还尝试添加-lboost_system-mt
,我看到其他答案提示)。#include <boost/filesystem.hpp>
导致最后2个链接器错误(关于boost::system::system_category()
和generic_category()
)发生。但是,使用#include <boost/regex.hpp>
,程序将成功构建。argvs[]
传递给我的程序,但我可以处理每个文件夹中的数万个文件,我怀疑这可能会变得难看。我是C ++的新手,几乎和Xcode一样新。我花了大约8小时试图让这个工作。
非常感谢您的帮助!
答案 0 :(得分:1)
我得到了同样的错误,这就是我修复它的方法。
Build Settings > Header Search Paths > (Add) /usr/local/include
Build Settings > Library Search Paths > (Add) /usr/local/lib
Build Settings > Other Linker Flags > (Add) -l boost_system -l boost_filesystem
我希望这有助于某人。