如何在 Xcode 中包含 <bits/stdc++>
Posted
技术标签:
【中文标题】如何在 Xcode 中包含 <bits/stdc++>【英文标题】:How can I include <bits/stdc++> in Xcode 【发布时间】:2015-05-13 16:29:23 【问题描述】:我试图在我的 C++ 代码中包含头文件 bits/stdc++,但编译器似乎不支持它。有什么办法让它工作吗?
我使用 OS X Yosemite 10.10.2 和 Xcode 6.1.1。
【问题讨论】:
您不应该直接包含此标头。为什么你认为你需要它? @Omar 除了你可能会得到显着增加的编译时间。使用您使用的函数/类所需的标准头文件,而不是一些内部 G++ 文件 @Omar “我曾经包含它而不是...”这是错误的。bits
目录中出现的标头旨在将 c++ 编译器实现与您的实际机器和操作系统环境绑定。这些通常包含在 c++ 标准库头文件的更高级别实现中,有时仅在某些条件下(#ifdef
's)
推荐阅读: Why should I not #include <bits/stdc++.h>?
tl;博士您的要求/需要是错误的,这就是原因。没有。
【参考方案1】:
您可以通过从此处复制 stdc++.h 文件来做到这一点: https://gist.github.com/reza-ryte-club/97c39f35dab0c45a5d924dd9e50c445f
然后你可以像这样在你的 c++ 文件中包含这个文件:
//suppose the file is in your home folder, here my username is reza
#include "/Users/reza/stdc++.h"
【讨论】:
这是一个糟糕的建议,包含完整路径的哈希是一种残暴的行为【参考方案2】:因为,bits/stdc++ 是 GNU GCC 扩展,而 OSX 使用 clang 编译器。
您必须在 /usr/local/include 中创建 bits 目录,然后在 bits 中创建一个头文件 stdc++.h 并将this gist 的内容粘贴到其中它。 然后,它应该可以按预期编译。
因为 /usr 目录在 Mac OSX 上默认是隐藏的。
-
打开查找器。
点击菜单栏上的Go,然后点击Go to folder或直接按Command+Shift+G。
输入路径/usr/local/include
现在按上述方法进行。
(更新:对于最新的 OS X,您需要在本地创建文件夹 include 并在 include 文件夹中创建 bits 文件夹,然后复制粘贴bits 文件夹内的代码。)
【讨论】:
使用上述路径,不适合我。但是通过这条路径它正在工作“/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/”【参考方案3】:Mac OS X 10.9+ 不再使用 GCC/libstdc++,而是使用 libc++ 和 Clang。
XCode 6.0.1 更新后,标头现在位于此处:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1
所以,从here获取stdc++.h文件,然后在上面的长地址中创建bits目录,并将文件stdc++.h复制到bits 目录。
【讨论】:
至少非常,不要称它为“bits/stdc++.h”。这是 libstdc++ 中实现头的名称。称它为“myHeaderWithAllOfTheStdlib”之类的【参考方案4】:你不能。 X-Code 使用带有 Clang 的 LLVM 工具链作为编译器,而 <bits/stdc++>
特定于 GNU 编译器工具链。
其次,你不应该像其他人所说的那样首先使用该标题。
【讨论】:
但是通过在“/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/”中创建文件夹命名位,我可以添加 stdc++.h 并且它起作用了【参考方案5】:在将 bits/stdc++.h 添加到你的 mac os 平台之前,首先要弄清楚你的包含文件在哪里。找出你的 mac 环境中使用了哪个包含文件。
在终端中运行此命令:
回声"" | gcc -xc - -v -E
这将提供您平台中 gcc 环境的详细信息
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
"/Library/Developer/......."
ignoring nonexistent directory
"/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/local/include"
ignoring nonexistent directory
"/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/Library/Developer/CommandLineTools/usr/lib/clang/10.0.1/include
/Library/Developer/CommandLineTools/usr/include
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks (framework directory)
End of search list.
# 1 "<stdin>"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 361 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "<stdin>" 2
转到包含路径。例如:/usr/local/include
创建一个 bits 文件夹并添加 stdc++.h 文件。
【讨论】:
谢谢。这显然有帮助。竞争性编程非常需要导入-
打开查找器。
单击菜单栏上的“前往”,然后单击“前往文件夹”或直接按 Command+Shift+G。
输入路径/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1
现在,从here获取stdc++.h文件,然后在上面的长地址中创建bits目录,并将stdc++.h文件复制到bits目录中。
【讨论】:
不,这非常愚蠢。这是来自 Linux GCC 4.8 的标头,而不是 Mac Clang 。 不要这样做我怎么强调都不为过。 救了我的命,Mac OS Catalina 10.15.7 和 Xcode 版本是 Version 12.4 (12D4e)【参考方案7】:1.从https://gist.github.com/eduarc/6....下载stdc++.h文件
2.在Finder CTRL + SHIFT +G 并打开/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/
3.创建文件夹位并将下载的文件复制到这里。
【讨论】:
【参考方案8】:-
打开查找器。
单击菜单栏上的“前往”,然后单击“前往文件夹”或直接按 Command+Shift+G。
输入路径或者直接c/p这个路径
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1
-
然后在上面的长地址中创建bits目录。
现在,从 [这里][1] 获取 stdc++.h 文件。
并将文件 stdc++.h 复制到 bits 目录。
【讨论】:
【参考方案9】:标准 GNU 编译器 G++ 不直接支持此头文件,因此我们使用以下步骤将其包含在所需位置:
cd /usr/local/include
mkdir 位
nano stdc++.h
然后从here复制头文件的代码。
希望有帮助! :D
【讨论】:
【参考方案10】:只需在您的文件目录中创建一个头文件,如 bitsStdcpp.hpp 文件,
在该文件中添加以下代码
并使用 #include "bitsStdcpp.hpp" 而不是 #include
#include <stdio.h>
using namespace std;
#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#if __cplusplus >= 201103L
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif
// C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif /* bitsStdcpp_hpp */
【讨论】:
【参考方案11】:其他人所说的原因也是因为 Mac OS X 10.9+ 不再使用 GCC/libstdc++ 而是使用 libc++ 和 Clang。
因此,解决此问题的另一种方法是将默认的 mac 编译器从 clang
改为 gcc
。
正如您在this image 中看到的,默认的mac 编译器是clang
。
所以,我们可以在这里安装gcc
!
步骤 1
运行以下命令安装 gcc(假设你的机器上安装了homebrew):
$ brew install gcc
第二步
安装 gcc 后,通过运行以下命令记录版本
$ gcc --version
第三步
所以现在当我们运行 g++-version 时,它将使用 gcc 编译器,但我们希望它在运行 g++ 时使用 gcc 编译器。为此,我们将创建一个 g++ 到 gcc 的符号链接:
$ cd /usr/local/bin
现在通过运行以下命令创建一个符号链接:
$ ln -s g++-[version] g++
(用您当前安装的版本替换。)
现在重新启动终端以使更改生效并运行 g++ ,它将使用 gcc 编译器。 It should look like this.
【讨论】:
【参考方案12】:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1
尝试使用此路径创建 bits 文件夹并添加 stdc++.h 文件。
【讨论】:
【参考方案13】:将此头文件的内容从链接复制到剪贴板:https://gist.github.com/reza-ryte-club/97c39f35dab0c45a5d924dd9e50c445f
在终端中运行:
mkdir /usr/local/include/bits vim /usr/local/include/bits/stdc++.h 切换到插入模式(按 i)和粘贴剪贴板内容 保存/退出(Esc + : + w + q + Enter)尝试编译您的源代码
【讨论】:
【参考方案14】:基本解决方案是创建bits
文件夹和stdc++.h
文件,编译器将在其中查找其库。
要为 g++ 或 gcc 找到这个,请转到终端并写入
**g++ -print-search-dirs**
你会得到这样的东西:
programs: =/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
libraries: =/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.0.0
转到包含文件夹中的库位置,创建一个bits
文件夹。在bits
文件夹中,使用这些contents 创建一个stdc++.h
文件。
请注意,如果您遇到诸如找不到特定头文件之类的错误,请在stdc++.h
中评论这些行。
【讨论】:
【参考方案15】:第一步:创建一个名为bits
的文件夹,创建一个名为stdc++.h
的文件,内容如下。
// C++ includes used for precompiling -*- C++ -*-
// Copyright (C) 2003-2015 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
/** @file stdc++.h
* This is an implementation file for a precompiled header.
*/
// 17.4.1.2 Headers
// C
#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#if __cplusplus >= 201103L
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif
// C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif
第 2 步:创建此文件后,转到要包含此文件的文件。
第 3 步:直接包含此文件的路径,例如。
如果我在/Library/Developer/CommandLineTools/usr/lib/clang/13.0.0/include/
中创建了这个文件夹/文件,
然后我会在我的 c++ 文件中使用,路径为:
/Library/Developer/CommandLineTools/usr/lib/clang/13.0.0/include/bits/stdc++/h
【讨论】:
以上是关于如何在 Xcode 中包含 <bits/stdc++>的主要内容,如果未能解决你的问题,请参考以下文章
如何在 XCode 3.2.5 项目中包含 Scintilla?
如何在 Xcode 4.2 中包含低于 4.3 的 iOS SDK