问题如题,Centos Linux中的gcc
包是否包含binutils
?
如果我安装了gcc rpm软件包,是否还需要安装binutils
?
此外,在Centos中,gcc
和g++
是否都已默认安装?
gcc
包可能包含编译器本身,例如文件/usr/bin/gcc
和目录/usr/lib/gcc/x86_64-linux-gnu/4.8/
(其中包含可执行文件cc1
)。
/usr/bin/gcc
程序启动cc1
(或cc1plus
等)来编译您的源代码*.c
,还使用as
将由cc1
生成的汇编代码(由cc1
生成)转换为对象文件*.o
,最后使用ld
进行链接。
使用gcc -v
编译一次以了解发生了什么,它会显示真正执行的二进制文件。请注意,gcc
只是一个驱动程序(启动其他可执行文件,如cc1
、as
、ld
等)。
as
和ld
程序由binutils
提供-需要编译。
binutils
软件包是gcc
软件包的必需依赖项(可能还包括libc
和libc-devel
等许多其他依赖项,但如果您真的想要,可以使用其他libc,如MUSL libc;通常libc提供动态链接器,例如/lib/ld-linux.so*
)。
学习如何使用rpm(在Centos上,或者在Ubuntu和Debian上使用dpkg
)查询软件包之间的依赖关系。
对于开发,您可能需要其他软件包。Debian有build-essential虚拟包。可能CentOS有相应的软件包。您肯定还想使用一些库(并且您需要它们的开发软件包,例如在Debian上使用libcurl4-gnutls-dev来开发libcurl HTTP客户端库)。另请参见此答案(适用于Ubuntu和Debian,但您可以将其适应为CentOS)。
在2021年,你至少想要使用GCC 10,并且可以决定编写自己的GCC插件(检查C++代码中的一些编码规则;你还想通过编写来记录你的编码约定)。请注意五个规则。
gdb
是否使用binutils
?也就是说,如果我想在某个平台上使用gdb
,我是否需要在同一平台上安装与binutils
相关的程序(如ar
、as
、nm
、ld
等)? - Guy Avraham
binutils --version
检查一下吗? - Fiddling Bitsbinutils
的情况下运行程序,但是你无法编译它们。 - Basile Starynkevitchbinutils
的一部分,那么如何在没有binutils
的情况下运行程序呢?这是我目前所知道的,我错了吗? - rakib_/lib/ld-linux.so*
)是由libc
软件包提供的,而不是由binutils
提供的;您可以删除binutils
软件包,仍然能够使用您的Linux系统(例如浏览器或文本处理器)。 - Basile Starynkevitchbinutils
(如果我没记错的话),每当我们安装操作系统时,binutils
都会首先安装,这就是我的困惑所在。此外,我认为动态加载器是binutils
的一部分。 - rakib_