Кроссплатформенная альтернатива этому определению реального пути?

Итак, кто-то недавно представил некоторые исправления ошибок в мой проект, и они также включили это:

#ifdef _MSC_VER
    #ifndef PATH_MAX
    #define PATH_MAX _MAX_PATH
    #endif
    #define realpath(N,R) _fullpath((R),(N),_MAX_PATH)
#endif

Проблема в том, что я использую Code::Blocks с MinGW, поэтому, когда я пытаюсь скомпилировать, он говорит, что realpath() вообще не определен. Отправитель не предоставил никакой альтернативы, и когда я пытаюсь найти realpath без MSVC, все, что я получаю, - это использование realpath с MSVC. У кого-нибудь есть что-то, что я могу использовать вместо MinGW?

2 ответа

realpath() является функцией POSIX, поэтому MinGW не находит ее Что вы могли бы сделать, это использовать библиотеку boost:: filesystem в качестве кроссплатформенной альтернативы, чтобы найти абсолютный путь. Учебник для boost:: filesystem доступен ниже:

http://www.boost.org/doc/libs/1_45_0/libs/filesystem/v2/doc/index.htm

Там уже было несколько вопросов по библиотеке boost:: filesystem. Ссылка на тот, который может быть полезен, была прикреплена ниже:

Как "нормализовать" путь, используя boost::filesystem?

Я нашел следующую настройку на #ifdefсостояние работало:

      /* Create a realpath replacement macro for when compiling under mingw
 * Based upon https://stackoverflow.com/questions/45124869/cross-platform-alternative-to-this-realpath-definition
 */
#ifdef WIN32
    #define realpath(N,R) _fullpath((R),(N),PATH_MAX)
#endif

В обоих случаях сгенерированные исполняемые файлы запускались в Windows 10. Протестировано с использованием:

  • Компилятор MEX для Windows MinGW64, упакованный MATLAB 2021a.
  • В i686-w64-mingw32-gccКросс-компилятор 7.3-win32, который работает в Linux и может генерировать 32-разрядные исполняемые файлы Windows.
Другие вопросы по тегам