我刚刚将我的 MacBook Pro 更新到 macOS Catalina 10.15,并尝试编译并运行 C++ 命令行程序,但我遇到了以前版本中不存在的问题;
这只是代码:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, World!\n";
return 0;
}
代码编译并输出预期的结果,但 Xcode 仍然显示:
fatal error: 'iostream' file not found
我尝试将 Build Settings/C++ Standard Library 更改为 libstdc++,但出现警告:
warning: include path for stdlibc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead
同样的 iostream 错误仍然存在。
我正在从命令行进行编译,此处(或其他地方)列出的答案都不适合我。
(到目前为止)似乎有效的是将以下内容添加到
.profile
或终端用于启动的任何脚本中:(zsh、csh、bash 等)
export C_INCLUDE_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include
export CPLUS_INCLUDE_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include
每当升级操作系统时,您可能都需要更改
MacOSX10.15.sdk
。
C_INCLUDE_PATH
和CPLUS_INCLUDE_PATH
是clang工具链而不是MacOS环境的选项,所以希望这个解决方案能够长期有效,不像xcode-select --install
(它不会修复升级时的包含目录)或ln -s ... /usr/include
(现在系统完整性保护已禁止)。
我遇到了同样的问题,并使用以下 YouTube 视频来解决它。 https://www.youtube.com/watch?v=hrPm7tWC-BI&feature=youtu.be
或者您可以遵循此路径。确保包含引号
Project - Build Settings - Search Paths - Headers Search Paths,添加以下路径: “/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/”
libstdc++
不适合 Xcode 构建和编译时间,
libstdc++
适用于 iPhone 运行时间
来自@Alan Birtles 推荐的答案
支持已从 iOS 12.0 模拟器运行时删除,但是 它保留在 iOS 12.0(设备)运行时中以实现二进制兼容性 与运输应用程序。libstdc++
我在
.hpp
文件中声明时遇到了这个。
#include <iostream>
#include <string>
好的
#ifdef __cplusplus
#include <iostream>
#include <string>
// usage code
#endif
我尝试使用 Xcode 安装全新的 Catalina。我将您的代码复制并粘贴到“test.cpp”中,然后运行:
clang++测试.cpp
与终端中的“test.cpp”文件位于同一目录中。结果是一个“a.out”文件,运行时:
./a.out
输出所需的“Hello, World!”结果。希望这有一些用处(作为参考)。
如果这是一个选项,请注意 CMake 将正确处理此问题。我在命令行上使用 clang++ 得到“找不到
<iostream>
”,但这个简单的项目构建得很好:
cmake_minimum_required(VERSION 3.30)
project(cpptest)
add_executable(
cpptest
src/test.cpp
)
#include <iostream>
int main()
{
std::cout << "hello" << std::endl;
return 0;
}