OSX:使用Xcode 8和C ++ 11的boost / filesystem的链接器错误

时间:2017-05-07 15:43:27

标签: c++ xcode c++11 boost linker-errors

这是我关于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;

}

我做了什么:

  1. brew install boost --build-from-source --c++11。我读到传递此--c++11标志的地方应该修复它,并且--build-from-source是必需的,以便标志实际传递给b2编译器。
  2. #include <boost/filesystem.hpp>在我的项目中。
  3. 构建设置下的标题搜索路径中添加了/usr/local/include。 (还尝试在那里添加/usr/local/include/boost/usr/local/include/boost/system,但无效。另外,在我的任何标头搜索路径上设置递归选项会让Xcode吓坏。)
  4. 在我的图书馆搜索路径中添加了/usr/local/lib
  5. 在我的其他链接标记中添加了-lboost_system -lboost_filesystem。 (还尝试添加-lboost_system-mt,我看到其他答案提示)。
  6. 尝试执行this answer所说的内容,但我的构建阶段部分中没有链接库到二进制部分。只需目标依赖关系编译源
  7. 顺便说一下,重新启动Xcode和/或我的笔记本电脑并不起作用。我在某个地方看到有人可以通过在安装了boost之后重新安装Xcode 来让它工作,但是嗯.. idk。
  8. 其他信息

    • 只是尝试#include <boost/filesystem.hpp>导致最后2个链接器错误(关于boost::system::system_category()generic_category())发生。但是,使用#include <boost/regex.hpp>,程序将成功构建。
    • 我也按照步骤成功安装了boost here并且能够运行boost / filesystem教程中的程序。
    • 我考虑将我需要使用的文件作为argvs[]传递给我的程序,但我可以处理每个文件夹中的数万个文件,我怀疑这可能会变得难看。
    • 操作系统版本:10.12.4
    • Xcode版本:8.3.2

    我是C ++的新手,几乎和Xcode一样新。我花了大约8小时试图让这个工作。

    非常感谢您的帮助!

1 个答案:

答案 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

我希望这有助于某人。