Кроссплатформенная альтернатива этому определению реального пути?
Итак, кто-то недавно представил некоторые исправления ошибок в мой проект, и они также включили это:
#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. Ссылка на тот, который может быть полезен, была прикреплена ниже:
Я нашел следующую настройку на
#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.