gpt4 book ai didi

macos - 在 OS X 10.11 上构建 GCC

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

在这里使用命令行在 OS X 10.11.1 上构建 GCC(最新版本):

../gccx/configure --with-gmp="/opt/local" --with-mpfr="/opt/local" \
--with-mpc="/opt/local" --with-libiconv-prefix="/opt/local" --with-pkgversion="GCCX" \
--program-transform-name='s/^gcc$/gccx/; s/^g++$/g++x/' --enable-languages=c

完全遵循构建说明,并收到此错误:
g++ -std=gnu++98   -g  -DIN_GCC    -fno-strict-aliasing
-fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wno-format -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -fno-common -DHAVE_CONFIG_H -DGENERATOR_FILE -fno-PIE -Wl,-no_pie -o build/genmatch \
build/genmatch.o ../build-x86_64-apple-darwin15.0.0/libcpp/libcpp.a build/errors.o build/vec.o build/hash-table.o ../build-x86_64-apple-darwin15.0.0/libiberty/libiberty.a Undefined symbols for architecture x86_64: "_iconv", referenced from:
convert_using_iconv(void*, unsigned char const*, unsigned long, _cpp_strbuf*) in libcpp.a(charset.o)
(maybe you meant: __Z14cpp_init_iconvP10cpp_reader, __cpp_destroy_iconv ) "_iconv_close", referenced from:
__cpp_destroy_iconv in libcpp.a(charset.o)
__cpp_convert_input in libcpp.a(charset.o) "_iconv_open", referenced from:
init_iconv_desc(cpp_reader*, char const*, char const*) in libcpp.a(charset.o) ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[3]: *** [build/genmatch] Error 1 make[2]: *** [all-stage1-gcc] Error 2 make[1]: *** [stage1-bubble] Error 2 make:
*** [all] Error 2

(完整的日志可在 https://gist.github.com/3cb5d044533e657f4add 获得。)

经调查 gcc/Makefile ,似乎 BUILD_CPPLIB变量不包括 $(LIBICONV),因为它在错误发生时处于 stage1 Bootstrap 中。相关部分前面有
# For stage1 and when cross-compiling use the build libcpp which is
# built with NLS disabled. For stage2+ use the host library and
# its dependencies.

然而很明显 build/genmatch 的 stage1 构建正在引用 libcpp,它使用来自 libiconv 的符号。所以这里有些不对劲。

我该如何解决?

最佳答案

一般讨论;一般交流

在 Mac OS X 上构建 GCC 是一个偶尔令人担忧的过程。多年来,我遇到了各种版本的 GCC 和各种版本的 Mac OS X 的各种问题。你可以在 Install GCC on Mac OS X 中看到我之前所做的解释。 — 用于在 Mavericks 10.9.x(或可能是 Mountain Lion 10.8.x)上构建 GCC 4.8.x;它还报告了在 Mavericks 10.9.x 上成功构建 GCC 4.9.0,但在 Yosemite 10.10.x 上没有这样做。

这是在 Mac OS X 10.11.1 El Capitan 上构建 GCC 5.2.0 的更新配方。
它从使用 XCode 7.1.1 开始——我不知道其他 XCode 的哪个版本是可以的。

请注意 El Capitan具有优胜美地和早期版本中没有的功能 SIP(​​系统完整性保护)。这意味着您不能在 /usr 下创建任意目录不再。我以前安装在/usr/gcc/vX.Y.Z ; El Capitan 不再允许这样做。因此,一项重大变化是我现在安装在 /opt/gcc/v.X.Y.Z 中。 .

我发现设置 DYLD_LIBRARY_PATH 是有问题的——尤其是在 El Capitan 上。在与过去的重大突破中,我现在根本没有设置它。请注意,脚本取消了它。还要注意,脚本将阶段 1 编译器 CC 和 CXX 显式设置为 /usr/bin/clang/usr/bin/clang++分别(XCode 编译器)。当前版本的 GCC 需要有能力的 C++ 编译器,而不是(或以及)C 编译器。

我偶尔会遇到 libiconv 的问题,但目前我已经通过没有安装我自己的版本来避开它们。同样,我偶尔会遇到 GCC 源代码中的一些 awk 脚本的问题。我必须破解它/他们才能让它正常工作。但是,使用 GCC 5.2.0 源代码的发布副本,我似乎能够直接开箱即用地构建。

如果您只有一个磁盘分区,那么下一点并不重要。如果您有多个磁盘,请确保目标目录不存在或确保其名称正是您想要的。在工作的机器上(不是 Mac,而是 Linux 机器等),我仍然使用 /usr/gcc/vX.Y.Z作为“官方”安装位置,但软件最终会出现在一些有足够空间的任意文件系统中,例如 /work4/gcc , 最终有一个符号链接(symbolic link)这样 /usr/gcc/vX.Y.Z到达 /work4/gcc/vX.Y.Z .但是,/work4/gcc/vX.Y.Z 至关重要。在编译 GCC 时不存在,因为它将通过 realpath() 解析名称或其等效项并嵌入 /work4/gcc/vX.Y.Z进入二进制文件,而不是中性名称 /usr/gcc/vX.Y.Z .这限制了安装的便携性;它被移动到的任何其他机器都必须有一个目录 /work4/gcc/vX.Y.Z ,即使您要求将其安装在 /usr/gcc/vX.Y.Z .

使用 XCode 7.1.1 在 Mac OS X 10.11.1 上编译 GCC 5.2.0

我不得不使用 GMP(5.1.3 而不是 6.0.0a)和 ISL(0.14 而不是 0.15)的低版本。更高版本的构建都给我带来了麻烦。

请注意,我将 GMP、MPC、MPFR、ISL 和 Cloog 的库代码(参见 GCC pre-requisites)放在 GCC 源目录中,以便 GCC 构建自己的这些库版本。我发现这是确保 GCC 正确定位这些库的最简单方法。

目标目录:/opt/gcc/v5.2.0
在运行 Intel Core i7、2.3 GHz、16 GiB 1333 MHz DDR3 主内存和 750 GB 5400 rpm 硬盘驱动器的 17"MacBook Pro(2011 年初)上构建时间约为 2h 15m。源占用约 850 MiB;构建树最终大约为 4.6 GiB——你需要足够的磁盘空间。安装的代码最终大约为 420 MiB。

使用的脚本 — extract-gcc-5.2.0.sh

#!/bin/bash

unset DYLD_LIBRARY_PATH

TAR=tar
VER_NUM=5.2.0
GCC_VER=gcc-${VER_NUM}
TGT_BASE=/opt/gcc
TGT_DIR=${TGT_BASE}/v${VER_NUM}
CC=/usr/bin/clang
CXX=/usr/bin/clang++

extract() {
echo "Extract $1"
$TAR -xf $1
}

if [ ! -d "$GCC_VER" ]
then extract ${GCC_VER}.tar.bz2 || exit 1
fi

(
cd ${GCC_VER} || exit

nbncl <<EOF |
cloog 0.18.1 tar.gz
gmp 5.1.3 tar.xz
# gmp 6.0.0 tar.lz
isl 0.14 tar.bz2
# isl 0.15 tar.bz2
mpc 1.0.3 tar.gz
mpfr 3.1.3 tar.xz
EOF

while read file vrsn extn
do
tarfile="../$file-$vrsn.$extn"
if [ ! -f "$tarfile" ]
then echo "Cannot find $tarfile" >&2; exit 1;
fi
if [ ! -d "$file-$vrsn" ]
then
(
set -x
extract "$tarfile" &&
ln -s "$file-$vrsn" "$file"
) || exit 1
fi
done
)

if [ $? = 0 ]
then
mkdir ${GCC_VER}-obj
cd ${GCC_VER}-obj
../${GCC_VER}/configure --prefix="${TGT_DIR}" \
CC="${CC}" \
CXX="${CXX}"
make -j8 bootstrap
fi

脚本 nbncl — 非空白、非注释行
#!/usr/bin/env perl
#
# Non-blank, non-comment lines only

use warnings;
use strict;

while (<>)
{
chomp;
s/\s+$//;
s/\s*#.*$//;
print "$_\n" unless /^$/;
}

关于macos - 在 OS X 10.11 上构建 GCC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33860902/

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