libc++.dylib 是为较新的 macOS 版本构建的,我该怎么办?

libc++.dylib was built for newer macOS version, what should I do?

提问人:Alex Cohn 提问时间:6/11/2023 更新时间:6/11/2023 访问量:296

问:

我正在使用普通的旧 make 来构建 macOS 可执行文件。经过一些升级,我看到

ld: warning: dylib (/usr/local/lib/libc++.dylib) was built for newer macOS version (13.2) than being linked (13.0)

简单的解决方法是将 -mmacosx-version-min=13.2 添加到 LDFLAGS,但这可能会在下一次升级中适得其反。这并不是说我无法以编程方式找到版本:

otool -l /usr/local/lib/libc++.dylib | grep minos | awk '{print $2}'

问题是为什么这首先发生在我身上。我安装了最新的 Xcode 14.3.1,它声明支持 macOS 13.3。另一个问题:如果我希望我的可执行文件也能在 macOS Ventura 13.0 上运行,我是否需要使用 Xcode 14.1(或相同旧版本的命令行工具)构建它?或者设置 -mmacosx-version-min=13.0 就足够了?

Xcode macOS 链接器错误

评论


答:

1赞 xaxole98 6/11/2023 #1

您看到的警告表明,该库是针对比您当前链接的 macOS (13.0) 版本更新的 macOS 版本 (13.2) 构建的。当您的系统上有多个库版本,并且它试图链接到与目标 macOS 版本不兼容的库时,通常会出现此警告。/usr/local/lib/libc++.dylib

要解决此警告,可以将标志添加到 LDFLAGS,如前所述。此标志指示链接器设置可执行文件将与之兼容的最低 macOS 版本。通过将其设置为 13.2,可以确保链接器不会抱怨正在为较新版本构建的 libc++ 库。-mmacosx-version-min=13.2

关于您对下一次升级导致特定 macOS 版本出现潜在问题的担忧,很难预测未来的升级及其影响。但是,通常最好使开发环境保持最新状态,包括 Xcode 和命令行工具,以确保与最新的 macOS 版本兼容。这样,您就可以从 Apple 提供的最新功能和错误修复中受益。

如果您希望可执行文件与 macOS Ventura 13.0 兼容,您有以下几种选择:

将最低 macOS 版本设置为 13.0:可以在编译和链接代码时使用该标志。这将确保您的可执行文件与 macOS 13.0 及更高版本兼容。-mmacosx-version-min=13.0

在 macOS Ventura 13.0 上测试:为确保兼容性,建议在 macOS Ventura 13.0 系统上通过物理硬件或虚拟机测试可执行文件。这样,您可以验证应用程序是否在目标平台上按预期运行。

请注意,将最低 macOS 版本设置为 13.0 并不意味着您的可执行文件不会在较新的 macOS 版本上运行。它仅确保与指定的最低版本兼容,同时允许它在较新的版本上运行。

归根结底,必须在要支持的目标平台上测试应用程序,并验证其与目标特定 macOS 版本的兼容性。

评论

0赞 Alex Cohn 6/11/2023
感谢您的详细回答。不幸的是,这并不能解释为什么现在会发生警告(为什么 clang++.dylib 的版本与我的 clang++ 不兼容),或者我能做些什么来确保它们在未来同步。至于强制,恐怕这行不通,因为目标机器上的 dylib 会比用于构建的 dylib 旧。-mmacosx-version-min=13.0
1赞 NotTheDr01ds 6/11/2023
欢迎来到 Stack Overflow!您的答案似乎很可能是由 AI(例如 ChatGPT)编写的(全部或部分)。在问这个问题时,我收到了 ChatGPT 的极其相似的回答。请注意,此处禁止发布 AI 生成的内容。如果您使用 AI 工具来帮助回答任何答案,我鼓励您删除它。
0赞 NotTheDr01ds 6/11/2023
读者应该仔细和批判性地审查这个答案,因为人工智能生成的信息通常包含根本性的错误和错误信息。如果您发现质量问题和/或有理由相信此答案是由 AI 生成的,请留下相应的反馈。审核团队可以使用您的帮助来识别质量问题。
0赞 Alex Cohn 6/12/2023
@NotTheDr01ds感谢您对 ChatGPT 进行检查。看起来答案很可能是由人工智能辅助的,因为它感觉太健谈了,没有回答我的具体问题。OTOH,这是将问题标记为此问题不符合 Stack Overflow 指南的原因吗?
1赞 NotTheDr01ds 6/12/2023
@AlexCohn 通常我们会用“需要版主关注”来标记这一点,并解释我们觉得它是人工智能生成的,以及为什么。但是,目前,由于 (a) SE 政策对处理方式的更改,以及 (b) 版主(和社区成员)导致的警示,标记不会产生任何影响。与此同时,我只是发表评论,以确保 (1) 发布此内容的用户了解该政策,(2) 读者知道它可能来自 AI,应该仔细审查。