如何使用当前版本逐段安装GCC(GNU编译器集合),
使用正确版本的依赖项,不使用包管理器(如yum,rpm,apt,dpkg),不使用共享库?
典型的开发人员可能希望以典型的方式安装GCC,使用您的包管理器(yum,rpm,apt,dpkg,port,brew等)或按照这里的说明(http://gcc.gnu.org/wiki/InstallingGCC)。
我的问题是如何在没有共享库的情况下逐个安装GCC。
- 我想要一个完全独立的GCC,可以在我的系统中移动,而不使用任何共享库,也不创建任何共享库。
- 这就是GCC所说的“困难的方式”,不建议典型用户使用。
GCC取决于:
- GNU多精度算术库
- MPFR:GNU多精度浮点舍入库
- MPC:GNU多精度C库
- 可执行和可链接格式库
- 帕尔马多面体库(可选,内存优化)
7条答案
按热度按时间5sxhfpxr1#
The Easy Way
如果你是一个典型的开发人员,你可以使用http://gcc.gnu.org/wiki/InstallingGCC或你的系统包管理器中的说明来简单地安装,比如:
字符串
The Hard Way
GCC说,这里的答案是“艰难的方式”,因为它一点一点地构建所有内容,并且不使用共享库。
GCC基础架构
获取GCC基础设施:
型
把下载文件放在一个临时目录下(你可以使用任何你想要的目录)。
型
在不同于下载目录或其子目录的临时目录中构建基础结构:
型
使用静态库配置基础设施,如下所示:
型
--disable-shared标志可能值得根据您的需要仔细查看。我使用--disable-shared是因为我只构建静态代码,并且我想确保我不构建任何共享代码。我的需要是在我的驱动器上轻松移动生成的GCC,所以我想要所有的静态代码,而不想要任何共享代码。如果您喜欢共享代码,请省略--disable-shared标志。
版本号
当您运行此答案中的任何命令时,请确保更新命令以使用符合您需要的当前GCC版本号。此答案中的命令适用于GCC 4.6.2。
请注意,GCC文档说:“虽然任何足够新的工具版本通常都可以工作,但库要求通常更严格。在某些情况下,较新的版本可能可以工作,但使用文档中的确切版本更安全。”
GMP
GMP是GNU Multiple Precision Arithmetic Library。
型
MPFR
MPFR是GNU多精度浮点舍入库。它依赖于GMP。
型
MPC
MPC是GNU Multiple-precision C库。它依赖于GMP和MPFR。
型
ELF
ELF代表可执行和可链接格式。这个库提供了与体系结构无关的大小和字节序支持。
型
GCC
GCC是GNU编译器集合。它依赖于GMP、MPFR、MPC和ELF。
型
在同一个挂载点上的临时目录中构建gcc。(在/tmp中构建它会触发交叉编译主机问题)
型
configure命令和它的标志必须都在一个命令行上(这篇文章只是因为网页宽度而将它们显示在单独的行上)。
注意事项:我们使用完整路径来配置而不设置库路径环境变量。我们选择禁用 Bootstrap 和禁用共享库,因为我们不需要它们(典型用户可能需要两者),并使用posix线程和默认标志,因为我们需要它们(典型用户可能需要使用其他线程或跳过默认标志)。YMMV并阅读有关标志here的信息
型
这个页面是伟大的GCC安装信息,如何构建它,各种标志,以及更多:
http://www.acsu.buffalo.edu/~charngda/cc_build.html的
更新
ppl库可用于内存优化:请参阅bugseng.com/products/ppl/Download(感谢Paul的评论)
你可以从gcc源目录运行./contrib/download_premises。(感谢reddit上的N7 P)
vuv7lop32#
公认的答案使它比必要的复杂远,并且不适用于所有版本。使用
--disable-shared
构建GCC通常是一个非常糟糕的主意。请参阅http://gcc.gnu.org/wiki/InstallingGCC以获得更简单的方法。整个过程应该不会比这更难(用你想要构建的版本替换4.6.2):
字符串
(But请阅读上面的链接,无论如何,它包含有用的信息。
显然,Ubuntu上的一些人在他们的环境中设置了大量的垃圾,这些垃圾干扰了GCC的构建过程,他们需要首先删除这些垃圾:
型
ezykj2lf3#
我在一个集群上工作。只有主节点连接到Internet。节点上的软件已经过时,通常不会维护。我没有root访问权限。我有两个选择:
我选择了第二个,并构建了gcc,g++和gfortran。
我把一切都建立在
字符串
对于
make
,我使用型
下面,gcc是用
你可以从这里得到最新的gcc:ftp://gcc.gnu.org/pub/gcc/releases
在这里找到的解释:ftp://gcc.gnu.org/pub/gcc/infrastructure
重复
我使用以下脚本获取依赖项:
型
下面使用bash函数:
型
下面的每个命令都将在刚下载的库的目录中发出。
GMP
型
MPFR
型
MPC
型
ISL
型
CLOOG
型
gcc
型
d6kp6zgx4#
使用上面Jonathan提到的方法,除了我必须手动下载gmp和mpfr并创建软链接(gcc 4.4.2发行版可能没有“download_premises”)
字符串
顺便说一句,使用“-with-gmp”和“with-mpfr”与“./configure”给了我“configure:error:cannot compute suffix of object files:cannot compile”。因此,我下载了gmp和mpfr的src,然后从gcc src顶层目录中创建了软链接
csbfibhn5#
在尝试安装GCC依赖项,包括GMP,MPFR和MPC。我遇到了额外的安装要求,错误和丢失的文件;例如MPFR安装所需的gmp. h头文件。在此过程中会遇到许多问题。但是,有一种更简单的方法来构建和安装GCC-X.0.0或更高版本,并带有 * 自动链接 *。
备选案文一。
为了保存Build与make的麻烦,make install和Linking动态库,只需:
无需通过发出 Make,Make Install 或运行 ./configure 文件或添加链接(如--with-gmp=/gmp_path/.../.....,--with-mpfr=/mpfr_path/.../...)来构建和链接支持下载到/somepath/的库,因为这是在运行创建 symlinks 的脚本时完成的。
**备选案文二。
配置:
字符串
发行日期:
型
注:
Make将需要很长时间才能完成。但是,您可以发出选项-j #no_pro。这将根据PC或Mac上的处理器数量并行运行Make。
有关如何执行此过程的详细信息,您可以访问:https://gcc.gnu.org/wiki/InstallingGCC。
5anewei66#
我遵循了joelparkerhenderson最受欢迎的答案。这是我能找到的通过互联网安装在 *NIX系统上的最佳答案。
为了子孙后代,我想补充说,如果你得到一个错误,如“安装错误:无法计算目标文件的后缀:无法编译”
然后用/tmp/gcc/lib更新LD_LIBRBARY_PATH(参见joelparkerhenderson的完整答案)
/tmp/gcc/lib包含所有必需的mpfr/mpc/gmp so文件,运行时链接器无法找到它们,除非您将它们添加到LD_LIBRARY_PATH。另外,不要忘记导出LD_LIBRARY_PATH ;)。https://gcc.gnu.org/wiki/FAQ#configure_suffix
qcbq4gxm7#
适用于GCC-13.2.0最新版本。
对于基于最新RPM的应用程序(
Red-hat
、Fedora
、Rocky-Linux
或CentOS
)sudo dnf install libgmp-dev libmpfr-dev libmpc-devel
个封装。字符串