此真实路径定义的跨平台替代方案?



所以,最近有人向我的项目提交了一些错误修复,它们还包括以下内容:

#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((。提交者没有提供任何替代方案,当我尝试在没有 MSVC 的情况下搜索 realpath 时,我得到的只是将 realpathMSVC 一起使用。有没有人有我可以与MinGW一起使用的东西?

realpath()是一个POSIX函数,这就是为什么MinGW找不到它的原因。你可以做的是使用 boost::filesystem 库作为跨平台的替代方案来查找绝对路径。下面提供了 boost::文件系统的教程:

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

关于boost::filesystem库已经有一些问题了。 下面附上了一个可能有用的链接:

如何使用 boost::文件系统"规范化"路径名?

我发现对#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上运行。 测试使用:

  • 由 MATLAB 2021a 打包的 MinGW64 原生 Windows mex 编译器。
  • i686-w64-mingw32-gcc7.3-win32交叉编译器,运行在Linux上,可以生成32位Windows可执行文件。

最新更新