繁体   English   中英

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

[英]Cross-platform alternative to this realpath definition?

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

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

问题是我在 MinGW 中使用 Code::Blocks,所以当我尝试编译时,它说 realpath() 根本没有定义。 提交者没有提供任何替代方案,当我尝试在没有 MSVC 的情况下搜索 realpath 时,我得到的只是将 realpathMSVC 一起使用。 有没有人有我可以与 MinGW 一起使用的东西?

realpath()是一个 POSIX 函数,这就是 MinGW 找不到它的原因。 您可以做的是使用 boost::filesystem 库作为跨平台的替代方法来查找绝对路径。 boost::filesystem 的教程如下:

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

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 上运行。测试使用:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM