提问人:Alex Cohn 提问时间:6/11/2023 更新时间:6/11/2023 访问量:296
libc++.dylib 是为较新的 macOS 版本构建的,我该怎么办?
libc++.dylib was built for newer macOS version, what should I do?
问:
我正在使用普通的旧 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
就足够了?
答:
您看到的警告表明,该库是针对比您当前链接的 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 版本的兼容性。
评论
-mmacosx-version-min=13.0
评论