• 鲲鹏(ARM64) GCC 9.1.0 CentOS 7.6移植指南
    1 GCC简介GNU编译器套装(英语:GNU Compiler Collection,缩写为GCC),指一套编程语言编译器,以GPL及LGPL许可证所发行的自由软件,也是GNU计划的关键部分,也是GNU工具链的主要组成部分之一。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。1985年由理查德·马修·斯托曼开始发展,现在由自由软件基金会负责维护工作。原名为GNU C语言编译器(GNU C Compiler),因为它原本只能处理C语言。GCC在发布后很快地得到扩展,变得可处理C++。之后也变得可处理Fortran、Pascal、Objective-C、Java、Ada,Go与其他语言。许多操作系统,包括许多类Unix系统,如Linux及BSD家族都采用GCC作为标准编译器。       2 配置编译环境2.1 安装依赖yum install bzip2 -y yum install gcc gcc-c++ -y ----结束3 编译依赖库3.1 编译gmp 6.1.2gmp下载链接:http://ftp.gnu.org/gnu/gmp/安装gmpwget https://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.bz2tar -jxf gmp-6.1.2.tar.bz2cd gmp-6.1.2./configure --prefix=/usr/local/gmp-6.1.2make -j4make install3.2 编译mpfr 4.0.2mpfr下载链接:https://ftp.gnu.org/gnu/mpfr/安装mpfrwget https://ftp.gnu.org/gnu/mpfr/mpfr-4.0.2.tar.gztar -zxf mpfr-4.0.2.tar.gzcd mpfr-4.0.2./configure --prefix=/usr/local/mpfr-4.0.2 --with-gmp=/usr/local/gmp-6.1.2makemake install3.3 编译mpc 1.1.0mpc下载链接:https://ftp.gnu.org/gnu/mpc/安装mpcwget https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gztar -zxf mpc-1.1.0.tar.gzcd mpc-1.1.0./configure --prefix=/usr/local/mpc-1.1.0 --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-4.0.2makemake install 4 编译GCC 9.1.0                                步骤 1      设置环境变量:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-1.1.0/lib:/usr/local/gmp-6.1.2/lib:/usr/local/mpfr-4.0.2/lib                                步骤 2      下载源码编译:wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-9.1.0/gcc-9.1.0.tar.gztar -xzf gcc-9.1.0.tar.gzcd gcc-9.1.0./configure --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-4.0.2 --with-mpc=/usr/local/mpc-1.1.0 --prefix=/usr/local/gcc-9.1.0make -j64make install                                步骤 3      确认版本生效:gcc -v  ----结束 5 参考更多信息请参见GCC官网:https://gcc.gnu.org/。
  • [交流分享] GCC编译常见问题汇总【鲲鹏920(ARM64)】
    概述当前ISV应用所依赖的编译工具、开发工具,第三方中间件和软件等,大多都是基于X86提供。第三方开源软件工具等开发语言大致分为两类:编译型语言:典型的如C/C++/Go语言,都属于编译型语言。编译型语言开发的程序在从x86处理器迁移到鲲鹏处理器时,必须经过重新编译才能运行。解释型语言:典型的如Java/Python语言,都属于解释型语言,解释型语言开发的程序在迁移到鲲鹏处理器时,一般不需要重新编译。解释型语言的源代码由编译器生成字节码,然后再由虚拟机解释执行。比如基于java的,只需要平台安装了jvm即可。 本文档主要描述基于编译型语言C/C++的第三方开源软件使用aarch64-linux-gcc编译器编译出针对鲲鹏arm64平台的可执行代码过程中常见问题汇总。      1 编译过程1.1 本地gcc编译1.1.1 编译过程介绍                                               一、基本信息  1、./configure 是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。  2、make 是用来编译的,它从Makefile中读取指令,然后编译。3、make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。二、详细解释1、configure命令这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure --prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 --sys-config= 参数进行设定。有一些软件还可以加上 –with --enable、--without、--disable 等等参数对编译加以控制,你可以通过允许 ./configure --help 察看详细的说明帮助。2、make这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。可能遇到的错误:make *** 没有指明目标并且找不到 makefile。问题很明了,没有Makefile,怎么办,原来是要先./configure 一下,再make。3、make insatll这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。4、说明在Linux下编译安装一个应用程序时,一般先运行脚本configure,然后用make来编译源程序,在运行make install,最后运行make clean删除一些临时文件。运行configure脚本,就可以生成Makefile文件,然后就可以运行make、make install和make clean。configure是一个shell脚本,它可以自动设定源程序以符合各种不同平台上Unix系统的特性,并且根据系统叁数及环境产生合适的Makefile文件或是C的头文件(header file),让源程序可以很方便地在这些不同的平台上被编译连接。到此时,就可以运行make进行编译,在运行make install进行安装了,最后运行make clean删除临时文件。$ make$ make install           (注:运行这个要有足够的权限)$ make clean利用configure所产生的Makefile文件有几个预设的目标可供使用,其中几个重要的简述如下:make all:产生我们设定的目标,即此范例中的可执行文件。只打make也可以,此时会开始编译原始码,然后连结,并且产生可执行文件。make clean:清除编译产生的可执行文件及目标文件(object file,*.o)。make distclean:除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。make install:将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径。如果用bin_PROGRAMS宏的话,程序会被安装至/usr/local/bin这个目录。make dist:将程序和相关的档案包装成一个压缩文件以供发布。执行完在目录下会产生一个以PACKAGE-VERSION.tar.gz为名称的文件。 PACKAGE和VERSION这两个变数是根据configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定义。在此范例中会产生test-1.0.tar.gz的档案。make distcheck:和make dist类似,但是加入检查包装后的压缩文件是否正常。这个目标除了把程序和相关文件包装成tar.gz文件外,还会自动把这个压缩文件解开,执行 configure,并且进行make all 的动作,确认编译无误后,会显示这个tar.gz文件可供发布了。这个检查非常有用,检查过关的包,基本上可以给任何一个具备GNU开发环境-的人去重新编译make –j [N]:make是编译的执行,指定此参数使用多核CPU并行编译的方式加快编译速度,可以使用cpu核数的一倍指定此参数值,CPU核数获取命令[cat /proc/cpuinfo | grep "processor" | wc -l],比如获取到的核数为16 ,可以指定编译参数:make -j 161.1.2 使用GCC编译应用I. 环境准备编译安装可能会依赖一些其他软件或者库等,我们需要提前配置好yum源,如果编译环境不能连公网的情况下,需要配置本地yum源;本地yum源配置上传操作系统ISO文件至编译环境,测试使用CentOS 7.5 aarch64版本环境,上传 CentOS-7-aarch64-Everything-1804.iso至操作系统/opt目录下mount /opt/CentOS-7-aarch64-Everything-1804.iso /media/ -o loop修改yum配置文件mv /etc/yum.repos.d   /etc/yum.repos.d.bakmkdir /etc/yum.repos.dtouch /etc/yum.repos.d/local.repochmod 644   /etc/yum.repos.d/local.repoecho   "[base-local]" >> /etc/yum.repos.d/local.repoecho   "name=$name" >> /etc/yum.repos.d/local.repoecho   "baseurl=file:///media" >> /etc/yum.repos.d/local.repoecho   "enabled=1" >> /etc/yum.repos.d/local.repoecho   "gpgcheck=0" >> /etc/yum.repos.d/local.repoyum clean allyum makecacheII. 下载源码包下载源码包xx_src_3.6.tar.gz上传至/opt目录,然后解压源码包tar –zxvf xx_src_3.6.tar.gz进入到解压目录。III. 生成makefile执行./configure,检查环境并生成makefile。常见问题:■有些源码文件默认不带configure文件,应该参考软件官网具体的配置步骤,常见处理方法如:1、目录下是否有autogen文件,可以执行./autogen.sh生成configure文件。2、使用cmake –G “Unix Makefies” 生成Makefile文件。■根据错误提示,确认软件缺少的一些依赖。如:【The C compiler identification is unknown.】,系统缺少gcc;【configure: error: --with-readline=yes (default) and headers/libs are not available】系统缺少readline。需要先安装这些依赖如:yum install –y gcc gcc-c++yum install -y readline-devel■无法猜测构建类型,有些包默认并不支持aarch64的系统,需要指定参数,或者修改config.guess文件方式,如:1、./configure –build=aarch64-linux2、修改源码中config.guess,添加如下代码(视具体情况,可以查看此文件,对于alpha,amd64,x86_64的设置参考修改)      aarch64:Linux:*:*)       echo   "$UNAME_MACHINE"-unknown-linux-"$LIBC"       exit   ;;      aarch64_be:Linux:*:*)       UNAME_MACHINE=aarch64_be       echo   "$UNAME_MACHINE"-unknown-linux-"$LIBC"       exit   ;;IV. 编译安装执行make –j 16make install完成编译安装。2 编译常见问题2.1 The C compiler identification is unknown.问题现象:       The C compiler identification is unknown.       The CXX compiler identification is unknown.解决方案:缺少交叉编译软件解决办法:       yum install gcc gcc-c++2.2 cannot remove 'libtoolT'问题解决问题现象:在使用./configure && make && make install 的时候,报错不能移除libtoolT,因为系统没有安装libtool 解决方案:安装libtool后重新编译操作步骤:yum install libtool -y2.3 yum-config-manager: command not found问题解决问题现象:yum-config-manager: command not found解决方案:系统没有安装yum附加工具包,安装yum附加工具包操作步骤:yum -y install yum-utils2.4 启动运行默认缓存不足问题解决问题现象:nginx: [crit] ngx_slab_alloc() failed: no memory         nginx: [emerg] http upstream check_shm_size is too small, you should specify a larger size.问题原因:检查后端服务器健康检查状态配置太多,导致默认缓存1M不够用。解决方案:增加默认缓存操作步骤:在“nginx.conf”的http块中增加一条配置,设置缓存大小,check_shm_size  50m2.5 执行编译时找不到configure文件问题解决问题现象: 执行编译时找不到configure文件,./configure 无效解决方案:如果目录下有autogen.sh文件,则使用此文件产生configure文件操作步骤: 使用./ autogen.sh执行该脚本解决方案:如果目录下无autogen.sh文件,采用cmake -G "Unix Makefiles"命令,生成标准的UNIX makefile操作步骤: 执行命令cmake -G "Unix Makefiles"2.6 无法猜测构建类型问题解决问题现象: Configure:error:cannot guess build type; you must specify one解决方案:在configure执行时指定构建类型操作步骤: 1、在./configure时加入 “--build=arm-linux --host=arm-linux”即可解决。如./configure --build=arm-linux --host=arm-linux2、修改config.guess或者gnu-os文件方式,添加如下代码(视具体情况,可以查看此文件,对于alpha,amd64,x86_64的设置参考修改)      aarch64:Linux:*:*)       echo   "$UNAME_MACHINE"-unknown-linux-"$LIBC"       exit   ;;      aarch64_be:Linux:*:*)       UNAME_MACHINE=aarch64_be       echo   "$UNAME_MACHINE"-unknown-linux-"$LIBC"       exit   ;;2.7 文件句柄配置过小问题解决问题现象: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]解决方案: 修改系统当前支持的文件句柄为65536(系统默认为65535,可用ulimit -n查询,elasticsearch要求最低为65536)操作步骤: 1. 编辑/etc/security/limits.conf,追加以下内容:              * soft nofile 65536        * hard nofile 65536         2. 修改参数,保存后重启云服务器生效2.8 内存映射大小配置问题解决问题现象:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]解决方案:修改单进程最多可用于内存映射区大小为262145(elasticsearch要求最小为262144)。操作步骤: 1. 编辑 /etc/sysctl.conf,追加以下内容:vm.max_map_count=2621452. 保存后,执行:sysctl –p2.9 configure: error: --with-readline=yes (default) and headers/libs are not available问题现象:有明显报错信息有报错解决方案:有些参数默认会报错,但去掉对编译没有影响,可以去掉后试一下解决办法:1.configure的带参数配置:./configure --with-readline=no2.提前安装,或者centos系统:安装readline:yum install readline-devel2.10 configure: error: --with-x=yes (default) and X11 headers/libs are not available问题现象:configure: error: --with-x=yes (default) and X11 headers/libs are not available解决方案:有些参数默认会报错,但去掉对编译没有影响,可以去掉后试一下解决办法:       设置参数 --with-x=no,或者       yum install libX11-devel        yum install libXt-devel2.11 configure: error: "liblzma library and headers are required"问题现象:configure: error: "liblzma library and headers are required"解决方案:缺少某些依赖,但是有些依赖无法通过yum源来进行安装,所以需要下载源码编译安装解决办法:       从官网下载相关依赖源码包,提前编译源码           wget https://tukaani.org/xz/xz-5.2.4.tar.gz           tar -zxvf xz-5.2.4.tar.gz           cd xz-5.2.4/           ./configure           make           make install2.12 checking whether PCRE support suffices... configure: error: pcre >= 8.20 library and headers are required问题现象:checking whether PCRE support suffices... configure: error: pcre >= 8.20 library and headers are required解决方案:当前版本不够,需要升级,yum安装一般是低版本,所以,如果出现版本过低,需要下载最新的版本,通过源码安装。解决办法:wget https://nchc.dl.sourceforge.net/project/pcre/pcre/8.42/pcre-8.42.tar.gztar -zxvf pcre-8.42.tar.gzcd pcre-8.42.tar.gz./configuremakemake install 2.13 configure: error: libcurl >= 7.22.0 library and headers are required with support for https问题现象:configure: error: libcurl >= 7.22.0 library and headers are required with support for https,curl版本过低解决方案:升级curl版本解决办法:wget https://curl.haxx.se/download/curl-7.61.0.tar.gztar -zxvf curl-7.61.0.tar.gzcd curl-7.61.0/./configuremakemake install2.14 /lib64/libstdc++.so.6: version `GLIBCXX_x.x.xx' not found问题现象:glibc版本过低解决方案:内核某些相关组件版本过低,比如GLIBC,需要升级,如果升级后还是报错,原因的是历史版本也会存在,但不会自动切换为新版本,我们需要手动切换。查询当前内核版本,是否有错误提示没有找到的版本,如果没有则需要安装,如果有,ls -i查看软链接位置,链接到新的版本。解决办法:       strings /lib64/libstdc++.so.6 | grep GLIBC确认是否包含GLIBCXX_ x.x.xx       cd /lib64       rm -rf libstdc++.so.6       ln -s libstdc++.so.6.0.22 libstdc++.so.6 
  • 凝思OS gfortran 编译器 编译安装(gcc8.3)
       安装环境类别子项版本获取地址(方法) 硬件CPUHi1616--网络Eth-10GE--存储SATA/SSD--内存64G 2666MHz--OS凝思6.0.90--Kernel4.19.0--软件GCC8.3.0https://ftp.gnu.org/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gz  GMP6.1.0https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2ISL0.18https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2MPC1.0.3https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gzMPFR3.1.4https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2安装凝思OS      安装时注意选择开发环境    下载gcc8.3源码gcc 8.3下载地址https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gzhttps://ftp.gnu.org/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gz下载解压#tar -xvf gcc-8.3.0.tar.gz  依赖包下载安装运行 gcc-8.3.0/contrib/download_prerequisites 脚本下载如下依赖gmp6.1.0、isl0.18、mpc1.0.3、mpfr3.1.4如果因为通过proxy导致下载失败,可手动下载后放到 gcc-8.3.0目录下gmp6.1.0、isl0.18、mpc1.0.3、mpfr3.1.4下载地址:https://gcc.gnu.org/pub/gcc/infrastructure/下载的gmp-6.1.0.tar.bz2、isl-0.16.1.tar.bz2、mpc-1.0.3.tar.gz、mpfr-3.1.4.tar.bz2包如下:进入 gcc-8.3.0目录中:wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2wget https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2wget https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gzwget https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2将安装包放于解压后的gcc-8.3.0目录下1. 注釋掉gcc-8.3.0/contrib/download_prerequisites文件的218~225行2. 在gcc-8.3.0目录下,执行命令./contrib/download_prerequisites2       编译安装进入gcc-8.3.0目录mkdir gcc83builddircd gcc83builddir../configure --prefix=/usr/local/gcc-8.3.0 --enable-checking=release --enable-language=c,c++,fortran --disable-multilib    make -j 64make install支持c,c++,fortran3       环境变量设置vim /etc/profile加入:  export export PATH=/usr/local/gcc-8.3.0/bin:$PATH  export LD_LIBRARY_PATH=/usr/local/gcc-8.3.0/lib64:$LD_LIBRARY_PATHsource一下source /etc/profile4       验证执行gcc -v   b.gfortran -v简单测试验证:vim hellof90.f90输入如下内容:program mainwrite(*,*) "hello fortran world."end program main 编译执行:gfortran hellof90.f90 -o hellof90./hellof90  
  • [中间件] 【华为云鲲鹏云服务最佳实践】【工具篇】第114期 Gcc-7.30安装配置指南
    1、简介gcc for linux(gcc编译器)是一款针对linux系统而开发的编译器软件。gcc for linux对自由软件类 Unix操作系统和一些所有权操作系统。Linux系统下的gcc(GNUCCompiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。官方链接:http://tsung.erlang-projects.org/类别:工具&插件2、基础环境类别子项版本获取地址(方法)华为云虚拟机KC1(920)--OSCentOS7.5Kernel4.14软件包Gcc7.3.0https://ftpmirror.gnu.org/gcc/gcc-7.3.0/gcc-7.3.0.tar.xz 3、依赖安装yum install -y wget gcc4、组件编译安装  下载源码包cd /optwget https://ftpmirror.gnu.org/gcc/gcc-7.3.0/gcc-7.3.0.tar.xztar –xf gcc-7.3.0.tar.xz  下载安装依赖进入解压好的目录,并执行以下命令下载安装依赖(时间稍长,耐心等待)cd gcc-7.3.0./contrib/download_prerequisites    编译:创建编译目录cd /usr/localmkdir gcc-build-7.3.0cd gcc-build-7.3.0/opt/gcc-7.3.0/configuremake –j8   (添加-j8,否则编译时间太长) make install 5、系统配置    无6、测试查看版本信息gcc -v 7、参考信息无  8、FAQQ:下载依赖包报错 A:原因分析:未发现GMP、MPFR和MPC tar下载包的解压目录解决方法:删除下载的四个tar包,重新执行./contrib/download_prerequisites
  • [C/C++] 【华为云鲲鹏云服务最佳实践】【语言篇】第015期 gcc-8.3.0安装配置指南
    1、简介gcc是GNU编译器套件(GNU Compiler Collection),它包括了C、C++、Objective-C、Fortran、Java、Ada、Go语言和D语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。 类别:语言2、基础环境类别子项版本获取地址(方法)华为云虚拟机KC1(920)--OSCentOS7.6Kernel4.14软件包 Gcc8.3.0http://mirror.hust.edu.cn/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gz3、依赖安装 安装依赖包# yum install -y gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel4、组件编译安装获取gcc-8.3.0发布包,并解压# wget http://mirror.hust.edu.cn/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gz# tar -xf gcc-8.3.0.tar.gz编译安装# cd gcc-8.3.0# ./configure -enable-checking=release -enable-languages=c,c++ -disable-multilib --prefix=/usr/local/gcc-8.3.0#nohup make &# make install# cp /usr/local/gcc-8.3.0/lib64/libstdc++.so.6.0.25 /usr/lib64/# ln -sf libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6# ln -sf gcc /usr/local/gcc-8.3.0/bin/cc配置环境变量# export PATH_BAK=$PATH# export PATH=/usr/local/gcc-8.3.0/bin/:$PATH5、系统配置  无6、测试检查gcc是否安装成功# gcc --version显示如下信息说明成功:7、参考信息 无8、FAQ无
  • KUNPENG平台Gcc9.1.0移植自动安装脚本
    1 Gcc简介GUN Compiler Collection简称GCC,它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。GCC之所以被广泛采用,一是支持基于宿主的开发(简单讲就是要为某平台编译程序,就在该平台上编译),二是支持交叉编译(即在A平台上编译的程序是供平台B使用的)。GCC支持的体系结构有四十余种,常见的有X86系列、Arm、PowerPC等。当前文档是文档适用于Arm-CentOS-7.5-64bit。2 环境信息2.1 环境信息类别子项版本获取地址OSCentOS7.5 Aarch64href="https://www.centos.org/download/" https://www.centos.org/download/服务器配置16U16GB40GB软件GCC9.1.0https://mirrors.ustc.edu.cn/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.xz3 软件移植3.1 环境准备OS安装类型:CentOS-7.5-aarch64-1804。 注:操作系统安装使用最小简化版安装(如上图),其余步骤安装一般安装操作系统步骤即可。 3.1.1 相关软件下载上传1、 上传CentOS 7.5系统ISO镜像文件至服务器2、 上传gcc-9.1.0.tar.xz源码包至服务器目录下下载地址:https://mirrors.ustc.edu.cn/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.xz 3.2 安装Gcc    1、 安装gcc软件        a. 上传自动安装脚本至服务器,如/opt目录下        (gcc_install.sh)        b. 执行如下命令添加执行权限:        chmod +x /opt/gcc_install.sh        c. 执行如下命令安装gcc9.1.0        sh /opt/gcc_install.sh        d. 提示gcc install seccess!表示安装成功4 软件运行4.1 验证执行安装完成后执行:gcc –v,如下则表示安装成功   5 参考信息https://developer.arm.com/tools-and-software/server-and-hpc/arm-architecture-tools/resources/porting-and-tuning/building-blast-with-arm-compiler/single-page
  • KUNPENG平台Gcc7.3移植自动安装脚本
    1 Gcc简介GUN Compiler Collection简称GCC,它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。GCC之所以被广泛采用,一是支持基于宿主的开发(简单讲就是要为某平台编译程序,就在该平台上编译),二是支持交叉编译(即在A平台上编译的程序是供平台B使用的)。GCC支持的体系结构有四十余种,常见的有X86系列、Arm、PowerPC等。当前文档是文档适用于Arm-CentOS-7.5-64bit。2 环境信息2.1 环境信息类别子项版本获取地址OSCentOS7.5 Aarch64href="https://www.centos.org/download/" https://www.centos.org/download/服务器配置16U16GB50GB软件GCC7.3 https://mirrors.ustc.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz3 软件移植3.1 环境准备:OS安装类型:CentOS-7.5-aarch64-1804。 注:操作系统安装使用最小简化版安装(如上图),其余步骤安装一般安装操作系统步骤即可。 3.1.1 相关软件下载上传:1、 上传CentOS 7.5系统ISO镜像文件至服务器2、 上传gcc-7.3.0.tar.gz源码包至服务器目录下下载地址:https://mirrors.ustc.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz 3.2 安装Gcc 1、 如果当前服务器不能访问外网,请先配置本地yum源。    a. 上传以下脚本至要安装ActiveMQ的服务器上的任意目录,如/opt。(local_yum_install.sh)    b. 执行如下命令添加执行权限:    chmod +x /opt/local_yum_install.sh    c. 执行如下命令安装配置本地yum源    sh /opt/local_yum_install.sh2、 安装gcc软件    a. 上传自动安装脚本至服务器,如/opt目录下 (gcc_install.sh)    b. 执行如下命令添加执行权限:    chmod +x /opt/gcc_install.sh    c. 执行如下命令安装gcc7.3    sh /opt/gcc_install.sh    d. 提示gcc install seccess!表示安装成功4 软件运行4.1 验证执行安装完成后执行:gcc –v,如下则表示安装成功   5 参考信息https://developer.arm.com/tools-and-software/server-and-hpc/arm-architecture-tools/resources/porting-and-tuning/building-blast-with-arm-compiler/single-page6 FAQ 
  • [中间件] 【华为云鲲鹏云服务最佳实践】【工具篇】第027期Gcc-8.3.1安装配置指南
    1、简介gcc是GNU编译器套件(GNU Compiler Collection),它包括了C、C++、Objective-C、Fortran、Java、Ada、Go语言和D语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。 类别:工具2、基础环境类别子项版本获取地址(方法)华为云虚拟机KC1(920)--OSCentOS7.7.1908Kernel4.18.0软件包 Gcc8.3.1 https://koji.fedoraproject.org/koji/buildinfo?buildID=13940003、组件编译安装下载Gcc9.1.0源码包并解压wget https://kojipkgs.fedoraproject.org//packages/gcc/8.3.1/5.fc29/src/gcc-8.3.1-5.fc29.src.rpm安装rpm源码包,安装后在 ~/rpmbuild 目录下rpm -ivh gcc-8.3.1-5.fc29.src.rpm安装依赖yum install -y yum install -y glibc-static zlib-devel gettext bison flex sharutils texinfo texinfo-tex systemtap-sdt-devel gmp-devel mpfr-devel libmpc-devel python2-devel python3-devel gcc-c++ elfutils-devel gcc-gnat doxygen graphviz texlive-collection-latex python-sphinx docbook5-style-xsl dblatex 解决 dejagnu,isl,isl-devel依赖wget http://rpmfind.net/linux/fedora/linux/releases/29/Everything/aarch64/os/Packages/d/dejagnu-1.6.1-4.fc29.noarch.rpmrpm -ivh dejagnu-1.6.1-4.fc29.noarch.rpmwget http://rpmfind.net/linux/fedora/linux/releases/29/Everything/aarch64/os/Packages/i/isl-0.16.1-7.fc29.aarch64.rpmrpm -ivh isl-0.16.1-7.fc29.aarch64.rpmwget http://rpmfind.net/linux/fedora/linux/releases/29/Everything/aarch64/os/Packages/i/isl-devel-0.16.1-7.fc29.aarch64.rpmrpm -ivh isl-devel-0.16.1-7.fc29.aarch64.rpm 编译rpmbuild -bb ~/rpmbuild/SPECS/gcc.spec 编译结果在 ~/rpmbuild/RPMS/ 目录下  5、系统配置    无6、测试安装#!/bin/bashREPO_PATH="/root/rpmbuild/RPMS/"yum install -y createrepoif [ $? -ne 0 ]; then    echo "Failed to install createrepo"    exit -1;ficreaterepo ${REPO_PATH}if [ $? -ne 0 ]; then    echo "Failed to run createrepo"    exit -1;ficat <<EOF > /etc/yum.repos.d/gcc8.3.1.repo[gcc8.3.1]name=gcc831baseurl=file://${REPO_PATH}enabled=1gpgcheck=0EOFyum repolistyum -y remove gcc gcc-c++yum -y install --enablerepo gcc8.3.1 gcc gcc-c++gcc --version  7、参考信息 无8、FAQ         无
  • [交流分享] 使用gcc9.1在开源组件xz编译时使用流水线编译选项-mtune=tsv110压缩效果参考
    Kunpeng920处理器支持流水线指令集,在编译过程中可以使用-mtune=tsv110编译选项来对比,增加流水线编译选项具体方法:l使用gcc9.1版本,在编译选项中分别带-mtune=tsv110和不带-mtune=tsv110两种场景下,分别编译XZ压缩工具,并使用编译好的XZ工具对gcc-9.1.0.tar.gz(119M)继续进行压缩,统计压缩和解压时间在xz开源组件编译后的目标文件夹下,执行如下指令可以计算压缩和解压时间,以及展示压缩后的文件大小等信息ltime ./xz -1 gcc-9.1.0.tar.gz;du -ksh gcc-9.1.0.tar.gz*;ls -l gcc-9.1.0.tar.gz*;read PAUSe;time ./unxz gcc-9.1.0.tar.gz*1.在xz目录下,分别执行./configure --prefix=/home/third-release/xz-no-tsv110 make -j 96 make install和./configure --prefix=/home/third-release/xz-tsv110 CPPFLAGS="-mtune=tsv110" CFLAGS="-mtune=tsv110"make -j 96make install2.分别在编译后生成的目标路径/home/third/release/xz-tsv110和/home/third-release/xz-no-tsv110下执行time ./xz -1 gcc-9.1.0.tar.gz;du -ksh gcc-9.1.0.tar.gz*;ls -l gcc-9.1.0.tar.gz*;read PAUSe;time ./unxz gcc-9.1.0.tar.gz* 然后分别计算五次求平均值,从对比来看,增加了-mtune=tsv110之后,以xz压缩工具为例,压缩时间有约10%的降低,解压时间则差别不大
  • 【鲲鹏翱翔】鲲鹏服务器GCC交叉编译环境搭建指南
    1、简介交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码。本指南主要内容为在非ARM架构服务器环境下搭建ARM的GCC编译环境,编译基于ARM架构的应用软件。交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的GCC相同。搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出ARM架构下Linux系统所需的操作系统、应用程序等,然后再上传到ARM服务器执行。2、环境类别版本配置备注ARM测试服务器CentOS7.5ARM通用计算增强型 | rc3.xlarge.4 | 4vCPUs | 14GB华为云官网正在公测x86编译服务器CentOS7.52vCPUs|4GB|s3.large.2 1.在华为云官网购买https://www.huaweicloud.com/product/ecs.html2.本地服务器部署Centos7.5x86编译服务器Ubuntu16.042vCPUs|4GB|s3.large.21.在华为云官网购买https://www.huaweicloud.com/product/ecs.html2.本地服务器部署Ubuntu16.04交叉编译器arm-linux-gcc 5.5.0https://releases.linaro.org/components/toolchain/binaries/5.5-2017.10/aarch64-linux-gnu/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz3、交叉编译器安装(x86服务器)3.1.安装标准的C开发环境执行以下命令:Ubuntu: apt-get install build-essentialCentOS: yum groupinstall Development Tools3.2.在/usr/local下建立名为ARM-toolchain的文件夹mkdir   /usr/local/ARM-toolchain3.3 下载gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz    可以通过wget的形式下载cd   /usr/local/ARM-toolchainwget https://releases.linaro.org/components/toolchain/binaries/latest-5/aarch64-linux-gnu/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz     也可以从网页上下载后上传到/usr/local/ARM-toolchain目录下。交叉编译工具链的地址在https://releases.linaro.org/components/toolchain/binaries/latest-5/aarch64-linux-gnu/      下载gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz下载完成后,解压tar包tar -xvf   gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz3.4.配置环境变量修改配置文件,在配置文件的最后一行加入路径配置:Ubuntu:vim /etc/bash.bashrc # Add ARM toolschain pathPATH= /usr/local/ARM-toolchain/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin:"${PATH}"CentOS: vim /etc/profile# Add ARM toolschain pathexport   PATH=$PATH:/usr/local/ARM-toolchain/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin3.5.环境变量生效与测试执行以下命令:Ubuntu:source /etc/bash.bashrc          aarch64-linux-gnu-gcc  -v执行上面的命令,显示arm-linux-gnueabi-gcc -v信息和版本CentOS: source /etc/profile         aarch64-linux-gnu-gcc  -v执行上面的命令,显示arm-linux-gnueabi-gcc -v信息和版本4、测试4.1.在x86服务器交叉编译1、创建hello.c执行:vim hello.c#include <stdio.h>int main(void){            printf("hello linux\n");          return   0;}2.交叉编译执行:aarch64-linux-gnu-gcc -o arm-hello hello.c4.2.测试执行1、在x86服务器上测试执行:chmod +x arm-hello执行:./arm-hello页面显示:-bash: ./arm-hello: cannot   execute binary file 2. 拷贝执行文件至ARM服务器执行:chmod +x arm-hello执行:./arm-hello页面显示:hello linux 5、参考信息     交叉编译指导: https://releases.linaro.org/components/toolchain/binaries/https://blog.csdn.net/mars1743/article/details/20492285 6、FAQ     待补充
  • 【鲲鹏翱翔】鲲鹏服务器GCC版本升级指南
    1. 简介GCC 编译器是 Linux 下默认的 C/C++ 编译器,大部分 Linux 发行版中都是默认安装的。鲲鹏服务器CentOS7.5中默认GCC版本为4.8.5,很多情况下需要升级。本指南描述了GCC升级到5.4.0的过程,可供相关人士参考。类别:编译器2. 部署环境Packet NameVersionCentOSCentOS  7.5 with ARMGCC5.4.07.3.03. 安装部署    3.1 编译升级GCC由于服务器Centos7.5默认安装的GCC版本较低,在某些场景下需要进行升级GCC,版本信息如下:[root@ecs-arm-felix-free01   ~]# gcc --versiongcc   (GCC) 4.8.5去官网下载http://ftp.gnu.org/gnu/gcc/下载GCC 5.4.0的源码压缩包解压安装       解压gcc-5.4.0.tar.gz[root@ecs-arm-felix-free01   ~]# tar -xvf gcc-5.4.0.tar.gz下载安装依赖,下载安装gcc需要的三个依赖[root@ecs-arm-felix-free01   ~]# yum -y install bzip2 wget    # 下载依赖需要使用把bzip2和wget两个命令[root@ecs-arm-felix-free01   ~]# cd gcc-5.4.0/[root@ecs-arm-felix-free01   ~]# ./contrib/download_prerequisites  #   在解压根目录中执行依赖下载完成后,编译更新gcc版本 [root@ecs-arm-felix-free01   ~]# cd ../ && mkdir gcc-build-5.4.0 && cd gcc-build-5.4.0    #执行命令前位于gcc-5.4.0目录下#   执行configure[root@ecs-arm-felix-free01   ~]# ../gcc-5.4.0/configure --enable-checking=release --enable-languages=c,c++   --disable-multilib#   执行编译,make时间1-2小时或更久[root@ecs-arm-felix-free01   ~]# make -j8    #-j8意味8核并行编译;[root@ecs-arm-felix-free01   ~]# make install    #执行安装备注:如果执行过程遇到configure: error: C++ preprocessor "/lib/cpp" fails sanity check,执行[root@ecs-arm-felix-free01   ~]# yum install glibc-headers [root@ecs-arm-felix-free01   ~]# yum install gcc-c++验证是否更新生效[root@ecs-arm-felix-free01   ~]# gcc -versiongcc   (GCC) 5.4.0生成的动态库替换老版本gcc的动态库。[root@ecs-arm-felix-free01   ~]# cp /usr/local/lib64/libstdc++.so.6.0.21 /lib64 [root@ecs-arm-felix-free01   ~]# cd /lib64 & cp libstdc++.so.6 libstdc++.so.6.old[root@ecs-arm-felix-free01   ~]# ln -s libstdc++.so.6.0.21 libstdc++.so.6#执行命令查看最新GLIBCXX_3.4.21[root@ecs-arm-felix-free01   ~]# strings /lib64/libstdc++.so.6 | grep GLIBC3.2 参考信息[1] GCC升级版本:https://www.linuxidc.com/Linux/2018-11/155395.htm
  • [C/C++] 【华为云鲲鹏云服务最佳实践】【语言篇】第002期 GCC-4.8.5 安装配置指南
    1、简介      GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。官方链接:http://gcc.gnu.org/       类别:编译器2、基础环境类别子项版本获取地址(方法)华为云虚拟机RC3(916)--OSCentOS7.5  Kernel4.14 软件包Gcc4.8.5 3、依赖安装无4、组件编译安装在yum源中查找gcc列表yum list|grep gcc在yum源直接安装gccyum install gcc5、系统配置无6、测试测试内容:gcc是否能正常使用1)vim test.ctest.c编辑内容为:#include <stdio.h>int main(int argc,char * argv[]){puts("Hello Arm!");return 0;}2)gcc test.c -o test3)./test测试结果:7、参考信息官方文档:https://gcc.gnu.org/onlinedocs/ 8、FAQ无
  • [C/C++] 鲲鹏_GCC版本升级指南
    1.   简介GCC 编译器是 Linux 下默认的 C/C++ 编译器,大部分 Linux 发行版中都是默认安装的。GCC 编译器通常以 Linux 命令的形式在终端(Shell)中使用。本指南描述了在ARM64,CentOS7.5的环境下升级GCC的过程,可供相关人士参考。2.   部署环境Packet NameVersionCentOSCentOS  7.5 with ArmGCC5.4.07.3.03.   安装部署      3.1  编译升级GCC由于服务器Centos7.5默认安装的GCC版本较低,在某些场景下需要进行升级GCC,版本信息如下:[root@ecs-arm-felix-free01   ~]# gcc --versiongcc   (GCC) 4.8.5去官网下载http://ftp.gnu.org/gnu/gcc/下载GCC 5.4.0的源码压缩包解压安装       解压gcc-5.4.0.tar.gz[root@ecs-arm-felix-free01   ~]# tar -xvf gcc-5.4.0.tar.gz下载安装依赖,下载安装gcc需要的三个依赖[root@ecs-arm-felix-free01   ~]# yum -y install bzip2 wget    # 下载依赖需要使用把bzip2和wget两个命令[root@ecs-arm-felix-free01   ~]# cd gcc-5.4.0/[root@ecs-arm-felix-free01   ~]# ./contrib/download_prerequisites  #   在解压根目录中执行依赖下载完成后,编译更新gcc版本 [root@ecs-arm-felix-free01   ~]# cd ../ && mkdir gcc-build-5.4.0 && cd gcc-build-5.4.0    #执行命令前位于gcc-5.4.0目录下#   执行configure[root@ecs-arm-felix-free01   ~]# ../gcc-5.4.0/configure --enable-checking=release --enable-languages=c,c++   --disable-multilib#   执行编译,make时间1-2小时或更久[root@ecs-arm-felix-free01   ~]# make -j8    #-j8意味8核并行编译;[root@ecs-arm-felix-free01   ~]# make install    #执行安装备注:如果执行过程遇到configure: error: C++ preprocessor "/lib/cpp" fails sanity check,执行[root@ecs-arm-felix-free01   ~]# yum install glibc-headers [root@ecs-arm-felix-free01   ~]# yum install gcc-c++验证是否更新生效[root@ecs-arm-felix-free01   ~]# gcc -versiongcc   (GCC) 5.4.0生成的动态库替换老版本gcc的动态库。[root@ecs-arm-felix-free01   ~]# cp /usr/local/lib64/libstdc++.so.6.0.21 /lib64 [root@ecs-arm-felix-free01   ~]# cd /lib64 & cp libstdc++.so.6 libstdc++.so.6.old[root@ecs-arm-felix-free01   ~]# ln -s libstdc++.so.6.0.21 libstdc++.so.6#执行命令查看最新GLIBCXX_3.4.21[root@ecs-arm-felix-free01   ~]# strings /lib64/libstdc++.so.6 | grep GLIBC    3.2 参考信息     [1] GCC升级版本:https://www.linuxidc.com/Linux/2018-11/155395.htm
  • [C/C++] GCC编译选项
    GCC官网编译选项网址:https://gcc.gnu.org/onlinedocs/gcc/Option-Index.html#Option-Index也可以去gcc源码中查询通用编译选项在gcc/common.opt中各个后端独有的在config/XXX/XXX.opt;例如gcc/config/arm/arm.opt查看各个优化默认的编译选项:gcc -c -Q -O3 --help=optimizersgcc -c -Q -O2 --help=optimizersgcc -c -Q -Os --help=optimizers
  • [C/C++] GCC编译过程简介
    gcc 语言编译全过程:预处理->编译->汇编->链接一、GCC快速入门Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件]其中,目标文件可缺省,Gcc默认生成可执行的文件名为:a.out我们来看一下经典入门程序"Hello World!"# vi hello.c#include <stdlib.h>#include <stdio.h>void main(void){printf("hello world!\r\n");}用gcc编译成执行程序。#gcc hello.c该命令将hello.c直接生成最终二进制可执行程序a.out这条命令隐含执行了(1)预处理、(2)汇编、(3)编译并(4)链接形成最终的二进制可执行程序。这里未指定输出文件,默认输出为a.out。如何要指定最终二进制可执行程序名,那么用-o选项来指定名称。比如需要生成执行程序hello.exe那么#gcc hello.c -o hello.exe二、GCC的命令剖析--四步走从上面我们知道GCC编译源代码生成最终可执行的二进制程序,GCC后台隐含执行了四个阶段步骤。GCC编译C源码有四个步骤:预处理-----> 编译 ----> 汇编 ----> 链接现在我们就用GCC的命令选项来逐个剖析GCC过程。1)预处理(Pre-processing)在该阶段,编译器将C源代码中的包含的头文件如stdio.h编译进来,用户可以使用gcc的选项”-E”进行查看。用法:#gcc -E hello.c -o hello.i 作用:将hello.c预处理输出hello.i文件。[root]# gcc -E hello.c -o hello.i[root]# lshello.c  hello.i[root]# vi hello.i# 1 "hello.c"# 1 "<built-in>"# 1 "<command line>"# 1 "hello.c"# 1 "/usr/include/stdlib.h" 1 3# 25 "/usr/include/stdlib.h" 3# 1 "/usr/include/features.h" 1 3# 291 "/usr/include/features.h" 3# 1 "/usr/include/sys/cdefs.h" 1 3# 292 "/usr/include/features.h" 2 3# 314 "/usr/include/features.h" 3# 1 "/usr/include/gnu/stubs.h" 1 3# 315 "/usr/include/features.h" 2 3# 26 "/usr/include/stdlib.h" 2 3# 3 "hello.c" 2void main(void){printf("hello world!\r\n");}2)编译阶段(Compiling)第二步进行的是编译阶段,在这个阶段中,Gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc把代码翻译成汇编语言。用户可以使用”-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。选项 -S用法:[root]# gcc –S hello.i –o hello.s 作用:将预处理输出文件hello.i汇编成hello.s文件。[root@richard hello-gcc]# lshello.c  hello.i  hello.s如下为hello.s汇编代码[root@richard hello-gcc]# vi hello.s.file   "hello.c".section    .rodata.LC0:.string "hello world!\r\n".text.globl main.type   main,@functionmain:pushl   %ebpmovl    %esp, %ebpsubl    $8, %espandl    $-16, %espmovl    $0, %eaxsubl    %eax, %espsubl    $12, %esppushl   $.LC0call    printfaddl    $16, %espmovl    $0, %eaxleaveret.Lfe1:.size   main,.Lfe1-main.ident  "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"3)汇编阶段(Assembling)汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码.选项 -c用法:[root]# gcc –c hello.s –o hello.o 作用:将汇编输出文件test.s编译输出test.o文件。[root]# gcc -c hello.s -o hello.o[root]# lshello.c  hello.i  hello.o  hello.s4)链接阶段(Link)在成功编译之后,就进入了链接阶段。无选项链接用法:[root]# gcc hello.o –o hello.exe 作用:将编译输出文件hello.o链接成最终可执行文件hello.exe。[root]# lshello.c  hello.exe  hello.i  hello.o  hello.s运行该可执行文件,出现正确的结果如下。[root@localhost Gcc]# ./helloHello World!在这里涉及到一个重要的概念:函数库。读者可以重新查看这个小程序,在这个程序中并没有定义”printf”的函数实现,且在预编译中包含进的”stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实现”printf”函数的呢?最后的答案是:系统把这些函数实现都被做到名为libc.so.6的库文件中去了,在没有特别指定时,gcc会到系统默认的搜索路径”/usr/lib”下进行查找,也就是链接到libc.so.6库函数中去,这样就能实现函数”printf” 了,而这也就是链接的作用。你可以用ldd命令查看动态库加载情况:[root]# ldd hello.exelibc.so.6 => /lib/tls/libc.so.6 (0x42000000)/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)函数库一般分为静态库和动态库两种。静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为”.a”。动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为”.so”,如前面所述的libc.so.6就是动态库。gcc在编译时默认使用动态库。