Ошибки компиляции для C ++ 17 <filesystem>на MinGW - PullRequest
0 голосов
/ 10 февраля 2019

Я хочу поиграть с новой библиотекой filesystem, которая теперь отличается от стандарта C ++ 17, однако я не могу заставить что-то компилировать.

Вещи, которые я уже пробовал:

  • Обновление MinGW до 8.2.0
  • Компиляция с g++ -std=c++17 test.cpp -o test
  • Добавление -lstdc++fs к компиляции (это не работает, я получаю ошибку c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: cannot find -lstdc++fs)
  • Использование <filesystem>, а также <experimental\filesystem>

Вот мой простой тестовый код только для того, чтобы попытаться собрать вещи:

#include <iostream>
#include <filesystem>

using namespace std;

int main(int argc, char* argv[]) {
  return 0;
}

и компилируя с g++ -std=c++17 test.cpp -o test

С этим я получаю ошибку (я):

In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\filesystem:37,
                 from test.cpp:2:
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\fs_path.h: In member function 'std::filesystem::__cxx11::path& std::filesystem::__cxx11::path::operator/=(const std::filesystem::__cxx11::path&)':
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\fs_path.h:237:47: error: no match for 'operator!=' (operand types are 'std::filesystem::__cxx11::path' and 'std::filesystem::__cxx11::path')
    || (__p.has_root_name() && __p.root_name() != root_name()))
                               ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\iosfwd:40,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ios:38,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ostream:38,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\iostream:39,
                 from test.cpp:1:

... много других ошибок ...

c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\fs_path.h:603:7: note: suggested alternative: 'string_view'
       string_type __tmp;
       ^~~~~~~~~~~
       string_view
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\fs_path.h:604:45: error: '__tmp' was not declared in this scope
       if (__str_codecvt_in(__first, __last, __tmp, __cvt))

У кого-нибудь еще есть предложения?Кажется, что большинство людей решают эту проблему, добавляя -lstdc++fs к компиляции, но, как я уже сказал, это не работает для меня.

Спасибо!

1 Ответ

0 голосов
/ 07 июня 2019

Проблема связана с самой веткой mingw и gcc / g ++ 8, а не с флагами компилятора или директивами препроцессора.Ошибка открыта здесь .

Попробуйте использовать стабильные релизы mingw-w64-7.x с директивой #include <experimental/filesystem> и флагами -lstdc++fs -std=c++17.Это будет работать на данный момент, или иначе ждать v9.1.0.

...