【问题标题】:Broken c++ std libraries on macOS High Sierra 10.13macOS High Sierra 10.13 上损坏的 c++ 标准库
【发布时间】:2018-04-03 00:45:10
【问题描述】:

我最近买了一台新的 MacBook,我在上面转移了我的旧会话。从那时起,在我升级到 10.13 之后,我无法编译任何东西,包括只有 iostream。
鉴于这个程序:

#include <iostream>

int main(void)
{
    std::cout << "Hello world !" << std::endl;
    return 0;
}

g++ main.cpp 时给我这个输出:

In file included from main.cpp:1:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iostream:38:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ios:216:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__locale:15:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:470:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string_view:171:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__string:56:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:640:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/memory:629:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/typeinfo:61:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/exception:82:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cstdlib:86:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/stdlib.h:94:
In file included from /usr/include/stdlib.h:65:
In file included from /usr/include/sys/wait.h:110:
In file included from /usr/include/sys/resource.h:72:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/stdint.h:119:
In file included from /usr/local/include/stdint.h:82:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/inttypes.h:247:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.0.0/include/inttypes.h:30:
/usr/include/inttypes.h:235:8: error: unknown type name 'intmax_t'
extern intmax_t
       ^
/usr/include/inttypes.h:236:9: error: unknown type name 'intmax_t'
imaxabs(intmax_t j);
        ^
/usr/include/inttypes.h:240:2: error: unknown type name 'intmax_t'
        intmax_t quot;
        ^
/usr/include/inttypes.h:241:2: error: unknown type name 'intmax_t'
        intmax_t rem;
        ^
/usr/include/inttypes.h:246:9: error: unknown type name 'intmax_t'
imaxdiv(intmax_t __numer, intmax_t __denom);
        ^
/usr/include/inttypes.h:246:27: error: unknown type name 'intmax_t'
imaxdiv(intmax_t __numer, intmax_t __denom);
                          ^
/usr/include/inttypes.h:250:8: error: unknown type name 'intmax_t'
extern intmax_t
       ^
/usr/include/inttypes.h:256:8: error: unknown type name 'uintmax_t'; did you
      mean 'uintptr_t'?
extern uintmax_t
       ^
/usr/include/sys/_types/_uintptr_t.h:30:24: note: 'uintptr_t' declared here
typedef unsigned long           uintptr_t;
                                ^
In file included from main.cpp:1:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iostream:38:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ios:216:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__locale:15:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:470:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string_view:171:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__string:56:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:640:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/memory:629:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/typeinfo:61:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/exception:82:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cstdlib:86:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/stdlib.h:94:
In file included from /usr/include/stdlib.h:65:
In file included from /usr/include/sys/wait.h:110:
In file included from /usr/include/sys/resource.h:72:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/stdint.h:119:
In file included from /usr/local/include/stdint.h:82:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/inttypes.h:247:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.0.0/include/inttypes.h:30:
/usr/include/inttypes.h:263:8: error: unknown type name 'intmax_t'
extern intmax_t
       ^
/usr/include/inttypes.h:269:8: error: unknown type name 'uintmax_t'; did you
      mean 'uintptr_t'?
extern uintmax_t
       ^
/usr/include/sys/_types/_uintptr_t.h:30:24: note: 'uintptr_t' declared here
typedef unsigned long           uintptr_t;
                                ^
In file included from main.cpp:1:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iostream:38:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ios:216:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__locale:15:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:470:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string_view:171:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__string:56:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:640:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/memory:629:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/typeinfo:61:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/exception:82:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cstdlib:86:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/stdlib.h:94:
In file included from /usr/include/stdlib.h:65:
In file included from /usr/include/sys/wait.h:110:
/usr/include/sys/resource.h:197:2: error: unknown type name 'uint64_t'
        uint64_t ri_user_time;
        ^
/usr/include/sys/resource.h:198:2: error: unknown type name 'uint64_t'
        uint64_t ri_system_time;
        ^
/usr/include/sys/resource.h:199:2: error: unknown type name 'uint64_t'
        uint64_t ri_pkg_idle_wkups;
        ^
/usr/include/sys/resource.h:200:2: error: unknown type name 'uint64_t'
        uint64_t ri_interrupt_wkups;
        ^
/usr/include/sys/resource.h:201:2: error: unknown type name 'uint64_t'
        uint64_t ri_pageins;
        ^
/usr/include/sys/resource.h:202:2: error: unknown type name 'uint64_t'
        uint64_t ri_wired_size;
        ^
/usr/include/sys/resource.h:203:2: error: unknown type name 'uint64_t'
        uint64_t ri_resident_size;
        ^
/usr/include/sys/resource.h:204:2: error: unknown type name 'uint64_t'
        uint64_t ri_phys_footprint;
        ^
/usr/include/sys/resource.h:205:2: error: unknown type name 'uint64_t'
        uint64_t ri_proc_start_abstime;
        ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.

我尝试了以下方法:

  • 使用Xcode-select --reset 重置 CLT
  • 重新安装 CLT
  • 重新安装 Xcode

这些解决方案都不起作用,这开始让我发疯。有人有同样的问题并找到了解决方案吗?

编辑:Xcode C++ 项目正在成功编译,但仍然不明白为什么它不会在终端中。

【问题讨论】:

  • 听起来stdint.h 已从您的搜索路径中溜走。您已经排除了损坏的工具链,该问题可能是您项目中的一条错误路径。您可以尝试检查您的设置并手动设置编译器、链接器搜索路径等。
  • 我其实没有这样的项目,我只是想测试一些功能,所以我把我所有的代码放到一个main.cpp 文件中,我尝试编译。需要注意的一件有趣的事情是 Xcode 成功构建了 C++ 项目(包括iostream
  • 在 C 文件中包含 stdlib 时,我遇到了类似的问题。未找到 uintX_t 类型:/usr/include/stdlib.h:65 中包含的文件:/usr/include/sys/wait.h:110 中包含的文件中:/usr/include/sys/resource.h

标签: c++ macos compilation std macos-high-sierra


【解决方案1】:

在升级到 high sierra(和 Xcode 9.1)后,我遇到了类似的问题,我的标准制作报告了不熟悉的警告。

它从/usr/local/include 中提取 .h 文件,而不是从(我认为的)标准 /usr/include 中提取。例如,没有可用的zlib.h

重新安装 Xcode(声称也安装命令行版本)没有帮助。

根本没有/usr/include,但C++ 系统包含可通过clang --version 中报告的链接获得,但没有任何C 包含。

xcode-select --install 和实际“安装”命令行材料之后,/usr/include 被填充了必要的 C 库,并且 make 再次开始编译而没有警告。

【讨论】:

  • 嗯,这不是关于警告,而是关于错误。如果只是一些链接器的警告,我不介意
【解决方案2】:

在转移到 macOS High Sierra 后,我遇到了完全相同的问题(尽管错误并不相同,但相似)。

我通过将/usr/local/include 重命名为/usr/local/include_old 找到了一种解决方法(好吧,名称并不重要,只是g++/clang 将不再在此文件夹中搜索标题)。

【讨论】:

  • 谢谢!虽然是肮脏的解决方案,Apple 真的应该快速解决这个问题。
  • 不错!您可以通过运行cpp -v 来确认这一点。我仍然看到/usr/local/include 被搜索,但是因为它不再有任何发现:ignoring nonexistent directory "/usr/local/include"
  • 有人能解释一下我这样做时我在做什么吗?感觉很危险
  • 在将 Mojave (10.14) 安装迁移到新机器(相同的操作系统)后,这发生在我身上。尝试了很多东西,然后将其作为最后的手段。固定!
  • 从 Mojave 更新到 Catalina 后,我也发生了同样的事情。在这种情况下,同样的解决方案有效。
【解决方案3】:

我今天遇到了完全相同的问题,执行xcode-select --install后,一切正常!

【讨论】:

    【解决方案4】:

    检查您没有在项目的标头搜索路径中包含“/usr/local/include”。

    【讨论】:

      【解决方案5】:

      升级到 MacOS Mojave 10.14.4 和 Xcode 10.2 后我遇到了同样的问题

      安装包后问题得到解决 /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

      【讨论】:

      • 您指的是本地文件系统上的文件。你确定这个包在 OP 的系统上可用吗?
      • 我相信这是 XCode 安装附带的,因为它也在我的系统上完全相同的位置。其他答案对我不起作用,这是唯一解决我问题的答案。
      • 是的,PKG 文件是在 xcode-select --install 时创建的
      • 你是怎么安装的?
      【解决方案6】:

      我最近在 golang 上遇到了同样的错误。

      这是我的解决方案:rm -rf /usr/local/include

      我猜更高版本的 MacOS(我目前在 BigSur 上)不再需要该文件夹,因此如果要删除该文件夹,您可能会节省一点存储空间。

      【讨论】:

        【解决方案7】:

        按照@Sudheer 的建议在这里找到了解决方案:

        sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
        

        来自https://donatstudios.com/MojaveMissingHeaderFiles

        将 /usr/local/include 重命名为 /usr/local/include_old 后。不确定这是否有必要,但单独重命名并没有帮助(尽管它改变了我遇到的错误类型)。

        【讨论】:

          猜你喜欢
          • 2018-10-23
          • 2018-03-06
          • 1970-01-01
          • 2018-03-14
          • 1970-01-01
          • 2018-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多