如何解决macOS SDK11 / ARM64:statfs64 / f_mntonname
我正在使用函数 statfs64
通过属性 f_mntonname
从 macOS 上的路径获取挂载点。
这在针对架构 x86_64 的 SDK 10.x 构建时工作正常。
但是,在为 arm64(和 SDK 11)构建时,该方法不可用。
我可以使用 statfs
作为后备,这似乎可用,但这对路径长度有限制。
我知道有 NSFileManager
-API (attributesOfFileSystemForPath
),但不幸的是没有安装路径的属性。
有谁知道如何在新的 SDK/平台上做到这一点?
谢谢和问候, 多米尼克
解决方法
statfs64
和 fstatfs64
自 macOS 10.6 起已被弃用,以支持“版本化符号”。
如果您为 macOS 10.6 或更高版本构建,只需切换到 statfs
和 statfs
,并将其添加到源文件的顶部(在包含之前):
#define _DARWIN_USE_64_BIT_INODE
或者添加一个编译器标志,如果更改很多源文件太繁琐:
-D_DARWIN_USE_64_BIT_INODE
对于 arm64 目标,这个已经设置好了,所以没有作用。
对于 x86_64 目标,这会导致链接器发出对 _statfs$INODE64
(相当于 _statfs64
)而不是 _statfs
的依赖。
如果您的 x86_64 切片确实需要支持 macOS 10.5,那么您将不得不求助于一些预处理:
#define _DARWIN_USE_64_BIT_INODE
#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1060
#define STATFS statfs64
#define FSTATFS fstatfs64
#else
#define STATFS statfs
#define FSTATFS fstatfs
#endif
如果您需要支持 macOS 10.4 或更低版本,那么无论如何您都不走运,因为那里没有 64 位 inode 支持。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。