没有这样的文件或目录,terminal,xcode,macports"/>

首页 > 解决方案 > 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 发行版?谢谢!

标签: terminalxcodemacports

解决方案


这个问题确实是由 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 邮件列表的以下线程中找到。


推荐阅读