【问题标题】:`std::filesystem::directory_iterator` compiler issue`std::filesystem::directory_iterator` 编译器问题
【发布时间】:2019-02-27 12:48:45
【问题描述】:

很多人(例如12)都询问过如何让std::filesystem::directory_iterator 工作,但我在阅读这些内容后仍然遇到问题。

我正在尝试构建一个小型静态库。在将目录迭代器添加到一些源文件中后,我更新了我的 gcc,并添加了 -lstdc++fs 位,但似乎没有任何效果,因为我不断收到错误消息

fatal error: filesystem: No such file or directory
 #include <filesystem>

如果我输入gcc --version,我会得到

gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

如果我输入 gcc-8 --version 我会得到

gcc-8 (Ubuntu 8.1.0-1ubuntu1) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

这是我编译所有内容的小 shell 脚本。我也尝试了其他一些变体。

EIGEN=/usr/include/eigen3

cd ./bin
for file in ../src/*cpp; do
        g++ -std=c++11 -fPIC -c -I$EIGEN -I../include -O3 $file "-lstdc++fs"
done    
ar crv libfoo.a *.o
cd ..

【问题讨论】:

  • 你忘了告诉我们出了什么问题。
  • 你如何尝试创建一个使用 libfoo.a 的实际可执行程序?
  • @JohnZwinck 抱歉。是这样的:致命错误:文件系统:没有这样的文件或目录
  • 您是否尝试将g++ 替换为g++-8
  • 这不是链接器问题。是编译器找不到头文件。

标签: c++ c++11 gcc c++17 std-filesystem


【解决方案1】:

&lt;filesystem&gt; 仅使用 C++17 添加到 C++ 标准库中。

g++ 7.3(您的默认g++)在此分数上并不完全符合要求。它不会用-std=c++17 定位&lt;filesystem&gt;。 合理地,它不会找到 &lt;filesystem&gt;-std=c++11,这是您发布的脚本所要求的。 但它会使用std=c++11 或更高版本定位&lt;experimental/filesystem&gt;

你还有g++-8(大概是g++ 8.1/8.2)。它将使用std=c++17 定位&lt;filesystem&gt;

$ cat main.cpp 
#include <filesystem>

int main()
{
    return 0;
}
$ g++-8 -std=c++17 main.cpp && echo $?
0

有趣的是,std=c++11std=c++14 也可以这样做:

$ g++-8 -std=c++11 main.cpp && echo $?
0
$ g++-8 -std=c++14 main.cpp && echo $?
0

使用g++-8,您无需链接过渡库libstdc++fs

(顺便说一句,聪明的钱总是在编译时启用严格的警告: ... -Wall -Wextra ...)

【讨论】:

  • 感谢 @MikeKinghan g++-8 -std=c++17 -fPIC -c -Wall -Wextra -I$EIGEN -I../include -O3 $file 为我工作,但 c++11/14 出于某种原因没有
猜你喜欢
  • 1970-01-01
  • 2019-09-10
  • 2021-01-17
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
相关资源
最近更新 更多