如何在 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 工具链作为编译器,而 &lt;bits/stdc++&gt; 特定于 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 文件。

【讨论】:

谢谢。这显然有帮助。竞争性编程非常需要导入 【参考方案6】:
    打开查找器。 单击菜单栏上的“前往”,然后单击“前往文件夹”或直接按 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

如何在 Xcode 中的 UI 测试类的目标中包含 SwiftyUserDefaults.swift?

如何在 OS X 中包含 omp.h?

在 Xcode 静态库中包含框架?

无法在 Xcode 中包含控制器?