查看“Preparing GCC Build”的源代码
←
Preparing GCC Build
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{Rating|1}} <noinclude>'''请注意,本文旨在包含于[[GCC Cross-Compiler]]和[[Building GCC]]中,因为它们共享此公共部分。'''</noinclude> GNU编译器集合是一个具有依赖关系的高级软件。 为了构建GCC,你需要以下内容: * 类Unix的环境(Windows用户可以使用Linux或Cygwin的Windows子系统) * 足够的内存和硬盘空间 (视情况而定,256 MiB不够)。 * GCC(有的待替换发行版)或其他system C编译器 * G++(如果构建GCC的版本>=4.8.0),或其他system C++编译器 * Make * Bison * Flex * GMP * MPFR * MPC * Texinfo * ISL (optional) * CLooG (optional) === 安装依赖项 === {| {{wikitable}} |- ! ↓ Dependency / OS → | 源代码 | Debian (Ubuntu, Mint, WSL, ...) | Gentoo | Fedora | Cygwin | OpenBSD | Arch |- |如何安装 |Normally |'''<tt>sudo apt install</tt> ''foo''''' |'''<tt>sudo emerge --ask</tt> ''foo''''' |'''<tt>sudo dnf install</tt> ''foo''''' |Cygwin GUI setup |'''<tt>doas pkg_add</tt> ''foo''''' |'''<tt>pacman -Syu</tt> ''foo''''' |- |Compiler |N/A |'''<tt>build-essential</tt>''' |'''<tt>sys-devel/gcc</tt>''' |'''<tt>gcc gcc-c++</tt>''' |'''<tt>mingw64-x86_64-gcc-g++</tt>''' / '''<tt>mingw64-i686-gcc-g++</tt>''' |Preinstalled |'''<tt>base-devel</tt>''' |- |Make |N/A |'''<tt>build-essential</tt>''' |'''<tt>sys-devel/make</tt>''' |'''<tt>make</tt>''' |'''<tt>make</tt>''' |Preinstalled |'''<tt>base-devel</tt>''' |- |[https://www.gnu.org/software/bison/ Bison] |[https://ftp.gnu.org/gnu/bison/] |'''<tt>bison</tt>''' |'''<tt>sys-devel/bison</tt>''' |'''<tt>bison</tt>''' |'''<tt>bison</tt>''' |? |'''<tt>base-devel</tt>''' |- |[https://github.com/westes/flex Flex] |[https://github.com/westes/flex/releases] |'''<tt>flex</tt>''' |'''<tt>sys-devel/flex</tt>''' |'''<tt>flex</tt>''' |'''<tt>flex</tt>''' |? |'''<tt>base-devel</tt>''' |- |[https://gmplib.org/ GMP] |[https://ftp.gnu.org/gnu/gmp/] |'''<tt>libgmp3-dev</tt>''' |'''<tt>dev-libs/gmp</tt>''' |'''<tt>gmp-devel</tt>''' |'''<tt>libgmp-devel</tt>''' |'''<tt>gmp</tt>''' |'''<tt>gmp</tt>''' |- |MPC |[https://ftp.gnu.org/gnu/mpc/] |'''<tt>libmpc-dev</tt>''' |'''<tt>dev-libs/mpc</tt>''' |'''<tt>libmpc-devel</tt>''' |'''<tt>libmpc-devel</tt>''' |'''<tt>libmpc</tt>''' |'''<tt>libmpc</tt>''' |- |[https://www.mpfr.org/ MPFR] |[https://ftp.gnu.org/gnu/mpfr/] |'''<tt>libmpfr-dev</tt>''' |'''<tt>dev-libs/mpfr</tt>''' |'''<tt>mpfr-devel</tt>''' |'''<tt>libmpfr-devel</tt>''' |'''<tt>mpfr</tt>''' |'''<tt>mpfr</tt>''' |- |[https://www.gnu.org/software/texinfo/ Texinfo] |[https://ftp.gnu.org/gnu/texinfo/] |'''<tt>texinfo</tt>''' |'''<tt>sys-apps/texinfo</tt>''' |'''<tt>texinfo</tt>''' |'''<tt>texinfo</tt>''' |'''<tt>texinfo</tt>''' |'''<tt>base-devel</tt>''' |- |[https://www.cloog.org/ CLooG] (Optional) |[https://www.cloog.org/ CLooG] |'''<tt>libcloog-isl-dev</tt>''' |'''<tt>dev-libs/cloog</tt>''' |'''<tt>cloog-devel</tt>''' |'''<tt>libcloog-isl-devel</tt>''' |N/A |N/A |- |[http://isl.gforge.inria.fr/ ISL] (Optional) |[http://isl.gforge.inria.fr/] |'''<tt>libisl-dev</tt>''' |'''<tt>dev-libs/isl</tt>''' |'''<tt>isl-devel</tt>''' |'''<tt>libisl-devel</tt>''' |N/A |N/A |} 你需要安装Texinfo来构建Binutils。 你需要安装GMP、MPC和MPFR来构建GCC。 GCC可以选择使用ClooG和isl库。 例如,你可以通过运行shell命令在Debian上安装 '''<tt>libgmp3-dev</tt>''': '''<tt>sudo apt install libgmp3-dev</tt>''' '''注意:'''第5版。已知Texinfo的x(或更高版本)与当前的Binutils 2.23.2版本(及更早版本)不兼容。 你可以使用<TT>makeinfo--version</TT>检查当前版本。 如果你的版本太新,并且在构建过程中遇到问题,则需要使用Binutils 2.24版本 (或更新版本) 或安装旧版本的Texinfo - 也许是通过从源代码上构建 - 并在Binutils构建前后将其添加到<tt>PATH</tt>。 ''' 注意: ''' ISL的版本0.13 (或更高版本) 与当前的CLooG 0.18.1版本 (及更早版本) 不兼容。 使用ISL的0.12.2版本,否则生成'''肯定会'''失败。 === 下载源代码=== 将所需的源代码下载到合适的目录中,例如 <tt>$HOME/src</tt>: * 你可以通过访问[https://gnu.org/software/binutils/ Binutils网站]或直接访问[https://ftp.gnu.org/gnu/binutils/ GNU主镜像站点]。 * 你可以通过访问[https://gnu.org/software/gcc/ GCC网站]或直接访问[https://ftp.gnu.org/gnu/gcc/GCC 主镜像站点]下载所需的GCC版本。 ''' 注意: ''' 使用的版本控制方案是每个句点分开一个完整的数字,即 Binutils 2.20.0比2.9.0更新。 如果查看按字母数字排序的tarball列表时,可能没有用此版本控制方案(相当常见的),这可能会让你感到困惑: 有时列表底部的文件不是最新版本! 获取最新版本的一个简单方法是按上次修改的日期排序并滚动到底部。 ===Linux用户构建系统编译器=== 你的发行版可能会发布自己补丁包的GCC和Binutils,这些修补的GCC和Binutils才可以在你的特定Linux发行版上工作。 你应该能够使用上述源代码构建一个工作的交叉编译器,但是你可能无法用源代码为当前的Linux发行版构建一个新的系统编译器。 在这种情况下,请尝试较新的GCC版本或获取打了补丁的源代码。 === Gentoo用户 === Gentoo提供[https://wiki.gentoo.org/wiki/Crossdev crossdev]来建立交叉开发工具链: emerge -av crossdev crossdev --help PORTDIR_OVERLAY="/usr/local/crossdev" crossdev --stage1 --binutils <binutils-version> --gcc <gcc-version> --target <target> 这将把GCC交叉编译器安装到一个"slot"中,即与现有的编译器版本一起安装。 你可以通过这种方式安装多个交叉编译器,只需更改目标名称即可。 它的缺点是,它还将引入gentoo补丁,并传递与官方[[GCC Cross-Compiler]]设置不同的额外配置选项,它们的行为可能会有所不同。 编译成功后,可以通过<target>-GCC调用你的交叉编译器。 如果需要,你还可以使用gcc-config在编译器版本之间切换。 不要用交叉编译器替换系统编译器。 包管理器还会在更新可用时立即提出建议。 你可以通过调用 “crossdev --clean <target>” 来卸载交叉编译器。 阅读[https://wiki.gentoo.org/wiki/Cross_build_environment 交叉开发]文档以获取更多信息。 请注意,binutils和GCC的版本号是''Gentoo package versions'', 即 "官方" (GNU) 版本可能有一个后缀,用于解决Gentoo维护者提供的其他补丁集。 (例如,''--binutils 2.24-r3--gcc 4.8.3''是撰写本文时最新的稳定包对。) 你可以省略版本号以使用可用的最新软件包。 Portage使用Overlay来存储不属于原始软件包管理的软件包。 Crossdev需要一个Overlay,在构建它们之前可以在其中存储其binutils和gcc包。 你可以正确配置一个,也可以使用PORTDIR_OVERLAY指向它应该保存其包管理器文件的位置。 使用PORTDIR_OVERLAY现有的overlay不是一个好主意,但是到那时你应该知道你是曾经是如何亲自设置它们的,以及如何正确地进行设置。 参考 [https://wiki.gentoo.org/wiki/Custom_repository#Crossdev]. ===MacOS用户=== macOS用户需要替换libiconv,因为系统libiconv已经严重过时。 macOS用户可以通过访问[https://gnu.org/software/libiconv/libiconv 网站]或直接访问[https://ftp.gnu.org/gnu/libiconv/GNU 主FTP镜像]。 否则,在OS X 10.4和10.5上编译GCC 4.3或更高版本时,可能会出现与libiconv相关的未解决符号错误。 安装新版本(自己编译或使用MacPorts)并添加 <tt>--with-libiconv-prefix=/opt/local</tt> (如果你自己编译,则为 <tt>/usr/local</tt>) 到GCC的 <tt>./configure</tt> 行。 或者,你可以将libiconv源代码放置到GCC-x.y.z/libiconv,它将作为GCC编译过程的一部分进行编译。 (此技巧也适用于MPFR,GMP和MPC)。 Binutils和GCC的makefile使用<source lang="make" enclose="none">$(CC)</source>变量来调用编译器。 在OS X上,默认解析为<source lang="text" enclose="none">gcc</source>,实际是 <source lang="bash" enclose="none">clang</source>. 在OSX10.8之前,Xcode的命令行工具包附带的Clang无法构建一个正常工作的GCC。 运行OS X 10.7或以下版本的用户可能需要从 [https://brew.sh Homebrew] 或从Apple网站上的某个地方查找并安装GCC。 你可以尝试使用预装在某些macOS版本上的旧GCC。 <source lang="bash"> # This is only necessary for OS X users running 10.7 or below. export CC=/usr/bin/gcc-4.2 export CXX=/usr/bin/g++-4.2 export CPP=/usr/bin/cpp-4.2 export LD=/usr/bin/gcc-4.2 </source> 一旦编译并安装了交叉编译器,你就需要取消设置这些导出。 ''' Lion用户注意: ''' 如果你在Lion(或更高版本)上,很可能你没有“真正的”GCC,因为苹果从Xcode软件包中删除了它,但你仍然可以安装它。 你可以通过Homebrew或通过从源代码编译来实现,[https://apple.stackexchange.com/a/38247 a StackExchange Answer]对这两种方法都有很好的描述。 ''' Maverick用户注意: ''' 可以使用Xcode 5.1.1构建binutils-2.24和gcc-4.8.3(可能的其他版本)。 请注意,使用LLVM构建GCC不是官方支持的,可能会导致有趣的错误,如果你愿意冒这个风险并想节省时间构建出host-gcc只是为了编译一个cross-gcc,请遵循以下内容。 用 [https://www.macports.org/ MacPorts] 安装GMP、MPFR、Mpc。 sudo port install gmp mpfr libmpc ../binutils-2.24/configure --prefix=$PREFIX \ --target=$TARGET \ --enable-interwork --enable-multilib \ --disable-nls --disable-werror ../gcc-4.8.3/configure --prefix=$PREFIX \ --target=$TARGET \ --disable-nls \ --enable-languages=c,c++ --without-headers \ --enable-interwork --enable-multilib \ --with-gmp=/usr --with-mpc=/opt/local --with-mpfr=/opt/local '''注意:''' port的GMP存在问题,因此使用来自/usr的OS X版本。 ===Windows用户=== Windows用户需要设置类Unix的环境,如[[MinGW]]或[[Cygwin]]。 也许值得先研究研究Linux等系统,看看它们是否符合你的需求,因为你通常在操作系统开发中使用许多类Unix的工具,而从类Unix的操作系统来看,这要容易得多。 '''如果你刚刚安装了基本的[[Cygwin]]软件包,你必须再次执行setup.exe并安装以下软件包:''' GCC, G++, Make, Flex, Bison, Diffutils, libintl-devel, libgmp-devel, libmpfr-devel, libmpc-devel, Texinfo MinGW MSYS是一种选择,由于它解决了本机Windows API而不是POSIX仿真层,因此工具链速度稍快。 一些软件包无法在MSYS下正确构建,因为它们不是为Windows设计的。 就本教程而言,除非另有说明,否则适用于Cygwin的所有内容也适用于MSYS。 确保安装C和C++编译器以及MSYS基本系统。 与Windows 10周年更新一起发布的“Windows Linux子系统(Beta版)”也是使用交叉编译器的一个选项。(使用GCC 6.1.0和Binutils 2.27于2016年8月8日进行测试)尽管处于测试状态,该交叉编译器运行速度相当快,但可能不是理想的永久性开发平台。 '''Cygwin注意:''' Cygwin在其bash <tt>%PATH%</tt>中包含你的Windows <tt>%PATH%</tt> 如果你以前使用过DJGPP,这可能会导致混淆,例如在Cygwin bash命令行上调用<tt>GCC</tt>仍会调用DJGPP编译器。 卸载DJGPP后,应删除DJGPP环境变量,并从 <tt>%PATH%</tt>中清除<tt>C:\djgpp</tt>条目(或其安装位置)。 同样,在系统路径变量中混淆构建环境可能是一个坏主意。 '''MinGW 注意:''' 有关构建跨工具链的一些特定于MinGW的信息可以在MinGW主页上的[http://www.mingw.org/wiki/HostedCrossCompilerHOWTO 托管的交叉编译器操作页面上找到]。 '''Windows Subsystem for Linux (Beta) 注意:''' 你不能让交叉编译器位于/mnt/c/(或/mnt/“x”)区域,因为尝试在那里编译交叉编译器会产生错误,而构建到$HOME/opt/cross则可以完美地工作。 此问题已使用Windows Update KB3176929修复 === OpenBSD用户 === OpenBSD用户可能需要从port安装“gcc”包,因为基本系统的gcc非常过时。 如果你想构建GCC,请尝试使用port对应的版本,而不是最新可用的版本,并将所有来自port的补丁应用到你的版本中。 另外,如果在编译LT0插件期间构建失败,则临时解决方案是在构建GCC的配置阶段通过添加 <tt>--disable-lto </tt> 来完全禁用LTO
本页使用的模板:
模板:Eq
(
查看源代码
)
模板:Eq1
(
查看源代码
)
模板:If
(
查看源代码
)
模板:Rating
(
查看源代码
)
模板:Show1
(
查看源代码
)
模板:Wikitable
(
查看源代码
)
返回至“
Preparing GCC Build
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
变体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息