gpt4 book ai didi

macos - 在 Mac 上构建 gcc 时遇到问题 - 找不到系统 header

转载 作者:行者123 更新时间:2023-12-01 11:04:04 32 4
gpt4 key购买 nike

我在运行 OS-X High Sierra 的 Mac 上,想创建一个单独的 gcc 版本。 Lemme 分享了我花了一周时间才完成的一些过程,以便对其他人有所帮助:

我创建了一个安全目录“gcc”并使用 svn 从 gcc 获取最新的源代码,它在名为“trunk”的子目录中创建。我最初在主干的顶层创建了一个名为“build”的目录。

它不会在没有 4 个依赖项的情况下编译,所以我运行 ./contrib/download 先决条件来获取它们,但它仍然无法编译,所以我分别进入这 4 个目录中的每一个并执行 ./configure, ./make 、./make install 和 ./make 检查。我做了安装部分,因为即使这些依赖项也相互依赖,所以安装似乎是确保可以找到它们的安全方法。后来我发现没有其他方法,尽管有相反的指示......

我成功地构建了依赖项 GMP、MPFR、ISL 和 MPC。然后我回到 ./build 并且 ../configure 成功了,但是构建(make)很快就失败了,说“源目录已经配置;先运行“make distclean there first”。谷歌搜索显示这是在源目录中配置时.我想也许我的主干/构建目录被认为是“在源目录中”,所以我移动了它并再次尝试,同样的事情发生了。当我尝试进入主干并输入“make distclean”时只是说没有规则使目标 distclean。

所以我想,也许是 4 个依赖目录?也许现在它们已安装,可以安全地将它们全部清除?在那里,使 distclean 工作并取出所有东西 - 甚至是我运行的测试。看起来很浪费并且需要预先安装它们,但它起作用了。

回到构建中,make 然后在 make 期间开始了一些严肃的编译工作,但崩溃说“应该包含系统头文件的目录不存在:/usr/include”。

我应该如何引导这个?我在哪里可以找到要复制到/usr/include 中的系统头文件?以后我会遇到缺少 libc 和库的相同问题吗?另外,如果我想在不重建的情况下将其移植到新计算机上,除了可执行文件和头文件之外,我还需要复制什么?我会把它们放在哪里?

感谢您的任何建议...
- 杰夫

最佳答案

我设法使用 Xcode 8.3.3 在 macOS Sierra 上巧妙地构建了 GCC。在您的系统上尝试以下操作。 (如果您有较新版本的 macOS 或较新版本的 Xcode,则可能需要进行一些调整。)

先决条件

  • macOS Sierra 10.12.6
  • Xcode 8.3.3

  • 细节:
    $ xcode-select -p
    /Users/strager/Applications/Xcode_8.3.3.app/Contents/Developer

    $ clang --version
    Apple LLVM version 8.1.0 (clang-802.0.42)
    Target: x86_64-apple-darwin16.7.0
    Thread model: posix
    InstalledDir: /Users/strager/Applications/Xcode_8.3.3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

    $ as --version
    Apple LLVM version 8.1.0 (clang-802.0.42)
    Target: x86_64-apple-darwin16.7.0
    Thread model: posix
    InstalledDir: /Users/strager/Applications/Xcode_8.3.3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

    $ ld -v
    @(#)PROGRAM:ld PROJECT:ld64-278.4
    configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS)
    LTO support using: LLVM version 8.1.0, (clang-802.0.42)
    TAPI support using: Apple TAPI version 1.33.11

    配置和构建
    $ # Download GCC's source code.
    $ git clone git://gcc.gnu.org/git/gcc.git gcc
    $ # I tested the following revision (SVN r278004 from November 9, 2019):
    $ (cd gcc && git checkout a9ad50cb8ec15c509d27c1dbd47b76f56d20fb3b)
    $ # Download GCC's uncommon dependencies.
    $ ./contrib/download_prerequisites
    $ # Apply a build fix: https://gcc.gnu.org/ml/gcc-patches/2019-11/msg01109.html
    $ patch -p1 <<<EOF
    diff --git a/libstdc++-v3/include/bits/alloc_traits.h
    b/libstdc++-v3/include/bits/alloc_traits.h
    index 55211ac1d72..6ad02df16f7 100644
    --- a/libstdc++-v3/include/bits/alloc_traits.h
    +++ b/libstdc++-v3/include/bits/alloc_traits.h
    @@ -566,7 +566,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    #endif

    template<typename _Alloc>
    - _GLIBCXX14_CONSTEXPR void
    + _GLIBCXX14_CONSTEXPR inline void
    __alloc_on_copy(_Alloc& __one, const _Alloc& __two)
    {
    typedef allocator_traits<_Alloc> __traits;
    @@ -580,7 +580,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    }

    template<typename _Alloc>
    - constexpr _Alloc
    + constexpr inline _Alloc
    __alloc_on_copy(const _Alloc& __a)
    {
    typedef allocator_traits<_Alloc> __traits;
    @@ -598,7 +598,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    #endif

    template<typename _Alloc>
    - _GLIBCXX14_CONSTEXPR void
    + _GLIBCXX14_CONSTEXPR inline void
    __alloc_on_move(_Alloc& __one, _Alloc& __two)
    {
    typedef allocator_traits<_Alloc> __traits;
    @@ -625,7 +625,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
    #endif

    template<typename _Alloc>
    - _GLIBCXX14_CONSTEXPR void
    + _GLIBCXX14_CONSTEXPR inline void
    __alloc_on_swap(_Alloc& __one, _Alloc& __two)
    {
    typedef allocator_traits<_Alloc> __traits;
    EOF

    $ # Configure a build directory for a 3-stage build.
    $ mkdir gcc-build-release
    $ cd gcc-build-release
    $ ../gcc/configure \
    --disable-werror \
    --enable-checking=release \
    --enable-languages=c,c++ \
    --prefix="${PWD}/../usr" \
    --with-native-system-header-dir=/Users/strager/Applications/Xcode_8.3.3.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ \
    --disable-multilib

    $ # Build.
    $ flags='-mmacosx-version-min=10.12 -Wa,-mmacosx-version-min=10.5 -iframework /Users/strager/Applications/Xcode_8.3.3.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/' ; \
    make -w -j9 BOOT_CFLAGS="${flags}" CFLAGS_FOR_TARGET="${flags}" CXXFLAGS_FOR_TARGET="${flags}"

    故障排除

    问题 :构建失败:

    the directory that should contain system headers does not exist: /usr/include



    事业 : GCC 的配置脚本默认为 --with-native-system-header-dir=/usr/include .那个导演不存在。

    解决方案 : 配置 --with-native-system-header-dir=/Users/strager/Applications/Xcode_8.3.3.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ .

    问题 :链接或配置失败:

    checking whether the C compiler works... no
    configure: error: in `/Users/strager/tmp/Projects/gcc/build-release/x86_64-apple-darwin16.7.0/libgomp':
    configure: error: C compiler cannot create executables



    config.log 显示:

    ld: library not found for -lcrt1.10.6.o



    或以下任何一项:

    ld: library not found for -ldylib1.o
    ld: library not found for -ldylib1.10.5.o



    事业 : -mmacosx-version-min=的值提供给链接器驱动程序的信息与 Xcode 中的 SDK 不匹配。 GCC tries to link the wrong objects .

    解决方案 :使用 -mmacosx-version-min=10.12 构建阶段 2 和 3 (对于 Xcode 8.3.3 的 MacOSX10.12.sdk )使用 BOOT_CFLAGS , CFLAGS_FOR_TARGET , 和 CXXFLAGS_FOR_TARGET制作变量。

    问题 : libstdc++.6.dylib 无法链接:

    0 0x1059a453b __assert_rtn + 129
    1 0x1059a940a mach_o::relocatable::CUSection::personalityName(mach_o::relocatable::Parser&, macho_relocation_info > const*) + 170
    2 0x1059b8c2e mach_o::relocatable::CUSection::parse(mach_o::relocatable::Parser&, unsigned int, mach_o::relocatable::CUSection::Info*) + 306
    3 0x1059b666b mach_o::relocatable::Parser::parse(mach_o::relocatable::ParserOptions const&) + 695
    4 0x1059af1c9 mach_o::relocatable::Parser::parse(unsigned char const*, unsigned long long, char const*, long, ld::File::Ordinal, mach_o::relocatable::ParserOptions const&) + 261
    5 0x1059d9758 archive::File::makeObjectFileForMember(archive::File::Entry const*) const + 748
    6 0x1059d8b8c archive::File::forEachAtom(ld::File::AtomHandler&) const + 238
    7 0x1059f2955 ld::tool::InputFiles::forEachInitialAtom(ld::File::AtomHandler&, ld::Internal&) + 533
    8 0x1059fe49c ld::tool::Resolver::resolve() + 44
    9 0x1059a5289 main + 725
    A linker snapshot was created at:
    /tmp/libstdc++.6.dylib-2019-10-13-002048.ld-snapshot
    ld: Assertion failed: ((parser.sectionForAddress(personalityAddr)->type() == ld::Section::typeCode) && "personality column in __compact_unwind section is not pointer to function"), function personalityName, file /Library/Caches/com.apple.xbs/Sources/ld64/ld64-278.4/src/ld/parsers/macho_relocatable_file.cpp, line 5128.
    collect2: error: ld returned 1 exit status



    事业 : LLVM's assembler ( as ) generates __compact_unwind sections .尽管 GCC linking with -no_compact_unwind , ld64 验证 __compact_unwind部分。数据格式错误(导致未知),因此链接器会提示。

    解决方案 : 告诉汇编器不要生成 __compact_unwind部分使用 -Wa,-mmacos-version-min=10.5对于阶段 2 和 3,使用 BOOT_CFLAGS , CFLAGS_FOR_TARGET , 和 CXXFLAGS_FOR_TARGET制作变量。

    问题 : libstdc++.6.dylib 无法链接:

    Undefined symbols for architecture x86_64:
    "__ZSt15__alloc_on_copyISaIcEEvRT_RKS1_", referenced from:
    __ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignERKS4_ in libstdc++.a(string-inst.o)
    "__ZSt15__alloc_on_moveISaIcEEvRT_S2_", referenced from:
    __ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_ in libstdc++.a(string-inst.o)
    "__ZSt15__alloc_on_swapISaIcEEvRT_S2_", referenced from:
    __ZN9__gnu_cxx14__alloc_traitsISaIcEcE10_S_on_swapERS1_S3_ in libstdc++.a(string-inst.o)
    ld: symbol(s) not found for architecture x86_64
    collect2: error: ld returned 1 exit status



    事业 : -fno-implicit-templates 导致不创建这些符号,即使它们是必需的。

    解决方案 : Mark function templates inline .

    问题 :ASAN(libsanitizer)无法编译:

    In file included from ../../../../gcc/libsanitizer/asan/asan_malloc_mac.cpp:64:
    ../../../../gcc/libsanitizer/sanitizer_common/sanitizer_malloc_mac.inc:20:10: fatal error: CoreFoundation/CFBase.h: No such file or directory
    20 | #include



    事业 :GCC 没有被告知 CoreFoundation 在 Xcode 的 SDK 中的位置。

    解决方案 :使用 -iframework .../SDKs/MacOSX.sdk/System/Library/Frameworks 构建阶段 2 和 3使用 BOOT_CFLAGS , CFLAGS_FOR_TARGET , 和 CXXFLAGS_FOR_TARGET制作变量。

    关于macos - 在 Mac 上构建 gcc 时遇到问题 - 找不到系统 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52211390/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com