terminal - Xcode升级后无法编译C++代码:没有这样的文件或目录
问题描述
今天早上将 macOS BigSur 升级到 11.1 并将 Xcode 升级到 12.3 后,我的 MacPorts 2.6.4 发行版开始出现问题。我不能再用 GNU C++ v10.2.0_4 编译一个简单的 C++ 程序:
g++ -O3 -std=c++11 -c libvec.cpp
In file included from /opt/local/include/gcc10/c++/cmath:45,
from libvec.cpp:1:
/opt/local/lib/gcc10/gcc/x86_64-apple-darwin20/10.2.0/include-fixed/math.h:45:10: fatal error: sys/cdefs.h: No such file or directory
45 | #include <sys/cdefs.h>
| ^~~~~~~~~~~~~
compilation terminated.
初步互联网搜索表明,此问题可能是由于与 Xcode 命令行工具不一致造成的。请您指导我如何调试和修复它?也许我需要在这样的升级后重新安装 MacPorts 发行版?谢谢!
解决方案
这个问题确实是由 macOS 从 11.0 更新到 11.1 和 Xcode 从 12.2 更新到 12.3 引起的。Apple 的新政策是在每次系统更新时增加 SDK 版本。由于此增量,与以前的 SDK 版本一起安装的 MacPorts GNU C++ 编译器现在失败。一个快速的解决方法是设置SDKROOT
环境变量以匹配新版本号:
export SDKROOT=`xcrun --show-sdk-path`
为方便起见,将此命令放入您的~/.profile
文件中。详细的问题解释和这个解决方案可以在 MacPorts 邮件列表的以下线程中找到。
推荐阅读
- sql - Oracle Apex 计数和显示列中的条目数
- php - NGINX 位置回退到 Symfony
- linux - Ubuntu 服务器 - Opam 安装问题
- python - 我该如何解决这个语法错误?
- webpack-4 - css 模块查询使用最新的 css-loader 打破 css 规则
- java - 在侦听器中调用 getValue() 时,android firebase 无法实例化抽象类
- c# - Xamarin 表单绑定标签获取和设置
- sql - 在左侧或右侧将数据框与 Pandas 合并
- django - 我可以有组织地使用 django 吗?
- xml - XMLSerializer - 为什么在序列化时有一个额外的子层?