分享

Linux下C开发环境的搭建过程---gcc、glibc安装和升级操作方法

 guitarhua 2016-09-19

LinuxC开发环境的搭建过程

                       ——安装gcc

 

前言

Linux系统中,软件安装程序比较纷繁复杂,不过最常见的有两种:

1)一种是软件的源代码,您需要自己动手编译它。这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz)。

2)另一种是软件的可执行程序,你只要安装它就可以了。这种软件安装包通常被是一个RPM包(Redhat Linux Packet Manager,就是Redhat的包管理器),后缀是.rpm

 

LinuxC天生就有不解之缘,Linux操作系统的内核主要就是用C写的,另外Linux下的很多软件也是用C写的,特别是一些著名的服务软件,比如MySQLApache等。初学者在编译MySQL这样的软件时,可能遇到过各式各样的错误,其实只要你初步了解了LinuxC开发环境,你就能自行解决这些错误。

 

LinuxC开发环境与Windows的有所不同,在Linux下,一个完整的C开发环境由以下三个部分组成:

1、函数库:glibc

要构架一个完整的C开发环境,Glibc是必不可少的,它是LinuxC的主要函数库。Glibc有两种安装方式:

A、安装成测试用的函数库——在编译程序时用不同的选项来试用新的函数库

B、安装成主要的C函数库——所有新编译程序均用的函数库

Glibc含几个附加包:LinuxThreadslocalecrypt,通常它们的文件名随版本不同而类似于下列文件名:

glibc-2.06.tar.gz

glibc-linuxthreads-2.0.6.tar.gz

glibc-localedate-2.0.6.tar.gz

glibc-crypt-2.0.6.tar.gz

2、编译器:gcc

gcc(GNU CCompiler)GNU推出的功能强大、性能优越的多平台编译器,gcc编译器能将CC++语言源程序、汇编程序和目标程序编译、连接成可执行文件,以下是gcc支持编译的一些源文件的后缀及其解释:Linux下C开发环境的搭建过程(一)

 

3、系统头文件:glibc_header

缺少了系统头文件的话,很多用到系统功能的C程序将无法编译。

 

Linux下安装GCC的具体过程

下面以CentOS 4.8为例,介绍如何搭建LinuxC开发环境,如果是更高版本的CentOS也可以参考,只是要注意软件版本的不同。

GCC建议我们将一个版本的GCC安装在一个单独的目录下。这样做的好处是将来不需要它的时候可以方便地删除整个目录即可(因为GCC没有uninstall功能);并且在安装完成后,仍然能够使用原来低版本的GCC编译器,即一个系统上可以同时存在并使用多个版本的GCC编译器。缺点是在安装完成后要做一些设置工作才能使编译器工作正常。

1、下载GCC

到官方网站http://gcc.或官方FTPftp://ftp./gnu(建议使用FlashFXP下载工具)可以查找到下载资源。目前GCC的最新版本为 4.5.1。可供下载的文件一般有两种形式:gcc-4.5.1.tar.gzgcc-4.5.1.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。

 

2、解压缩

根据压缩格式,选择下面相应的一种方式解包:

tar  zvxf  gcc-4.5.1.tar.gz  或者  tar  jvxf  gcc-4.5.1.tar.bz2

根据个人所好选择解压位置,新生成的gcc-4.5.1这个目录被称为源目录,我们用${srcdir}表示它。以后在出现${srcdir}的地方,应该用真实的路径来替换它。在${srcdir}/INSTALL目录下有详细的GCC安装说明,可用浏览器打开index.html阅读。

我选择将gccglibc分别安装在/opt/gcc-4.5.1/opt/glibc- 2.7下,因为若选择安装在//usr/usr/local等位置,一些库文件会默认安装到 /lib下,有些库会默认安装到/usr/lib下,从而覆盖掉原有的工具链,这是我们所不希望的。

[root@localhost test]# pwd

/test/

[root@localhost test]# ls

gcc-4.5.1.tar.gz

[root@localhost test]# tar zvxf gcc-4.5.1.tar.gz

[root@localhost test]# ls

gcc-4.5.1  gcc-4.5.1.tar.gz

 

3、建立目标目录

目标目录(用${objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。

例如,可以这样建立一个叫 gcc-build 的目标目录(与源目录${srcdir}是同级目录):

[root@localhost test]# pwd

/test

[root@localhost test]# mkdir gcc-build

[root@localhost test]# ls

gcc-4.5.1  gcc-4.5.1.tar.gz  gcc-build

以下的操作主要是在目标目录 ${objdir} 下进行。

 

4、配置

配置的目的是决定将GCC编译器安装到什么地方(${destdir}),支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}${srcdir}目录相同。

配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${srcdir}${destdir}):

${srcdir}/configure  --prefix=${destdir} [其它选项]

例如,如果想将GCC 4.5.1安装到/opt/gcc-4.5.1目录下,则${destdir}就表示这个路径。

在我的机器上,我是这样配置的:

[root@localhost test]# cd gcc-build/

[root@localhost gcc-build]# ../gcc-4.5.1/configure --prefix=/opt/gcc-4.5.1

--enable-threads=posix       --disable-checking    --enable--long-long

--host=i386-RedHat-linux    --with-system-zlib

--enable-languages=c,c++,java

这样就将GCC安装在/opt/gcc-4.5.1目录下,支持C/C++JAVA语言,其它选项参见GCC提供的帮助说明。

 

注:这里有一个问题:如果系统上没有装过编译器,是不能安装源代码形式的GCC的。——悲剧就这样发生了~

configure: error: no acceptable C compiler found in $PATH

See `config.log' for more details.

这种情况下,只能到网上找一个与系统相适应的RPM二进制形式的GCC软件包来安装。这里不多说了,请参照另一篇博文吧!

 

还有一个问题(怎么我安装的时候就这么多问题啊~),GCC编译需要GMPMPFRMPC这三个库:

configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.

说明要安装gcc需要GMPMPFRMPC这三个库,可以从ftp://gcc./pub/gcc/infrastructure下载相应的压缩包。由于MPFR依赖GMP,而MPC依赖GMPMPFR,所以要先安装GMP,其次MPFR,最后才是MPC。这里三个库我用的版本分别是gmp4.3.2mpfr2.4.2mpc0.8.1

先开始安装GMP。解压GMP的压缩包后,得到源代码目录gmp-4.3.2。在该目录的同级目录下建立一个临时的编译目录,这里命名为gmp-build。然后开始配置安装选项,进入gmp-build目录,输入以下命令进行配置:

[root@localhost gmp-build]# pwd

/test/gmp-build

[root@localhost gmp-build]# ../gmp-4.3.2/configure --prefix=/opt/gmp-4.3.2

这里--prefix选项代表要将该库安装在哪里,我是装在/opt/gmp-4.3.2目录下,后面的安装都会用到这个选项。

这时在gmp的编译目录下就会生成一个makefile文件,现在开始编译安装。

[root@localhost gmp-build]# make

[root@localhost gmp-build]# make install

这样就安装好了gmpmpfrmpc的安装方法与此类似。不过在配置的时候要注意把依赖关系选项加进去,具体命令如下:

[root@localhost mpfr-build]# ../mpfr-2.4.2/configure  --prefix=/opt/mpfr-2.4.2  --with-gmp=/opt/gmp-4.3.2

[root@localhost mpc-build]# ../mpc-0.8.1/configure   --prefix=/opt/mpc-0.8.1   --with-gmp=/opt/gmp-4.3.2 --with-mpfr=/opt/mpfr-2.4.2

 

安装好这三个库之后,就可以正式安装gcc了。可能需要在选项处添加上面三个库的位置,如:--with-gmp=/opt/gmp-4.3.2  --with-mpfr=/opt/mpfr-2.4.2  --with-mpc=/opt/mpc-0.8.1

 

5、编译

[root@localhost gcc-build]# make

很长时间才能编译完,要有耐心。约用40分钟(可能更长、巨长……)吧,只有等待。

 

6、安装

执行下面的命令将编译好的库文件等拷贝到/opt/gcc-4.5.1目录下(根据你设定的路径,可能需要管理员的权限),这才是真正的安装:

[root@localhost gcc-build]# make install

 

7、链接

gccg gcj的设置。要想使用GCCgcc等命令,简单的方法就是用符号链接的方式把它链接到/user/bin 目录下:

[root@localhost gcc-build]# cd  /usr/bin

[root@localhost bin]# ln -s /opt/gcc-4.5.1/bin/gcc gcc

[root@localhost bin]# ln -s /opt/gcc-4.5.1/bin/g g

[root@localhost bin]# ln -s /opt/gcc-4.5.1/bin/gcj gcj

这样,就可以分别使用gccggcj命令来分别快速编CC++ JAVA的程序了。

 

8Test

test.c代码如下:

#include

main()

{

printf("Hello world!\n");

}

 

[root@localhost ~]# cd /test

[root@localhost test]# gcc test.c

[root@localhost test]# ./a.out

Hello world!     

 

----------------------------------------------

说来惭愧,学习嵌入式系统设计与应用已快一学期了,竟然还未用GCC编译个程序,更不用说使用其他编程环境了,其原因在于我的系统上没有GCC,想装一个可是不知道怎样个装法,Google了一下,发现基本上都是介绍系统上已有GCC的那种安装源码形式的GCC,我系统上本来就没有gcc,所以不能安装源码形式的gcc,那怎样解决这种状况呢?

解决方法有三种:

重装系统,在安装时选择定制安装包,选上GCC或选完全安装;

利用安装盘装(so easy!);Linux下C开发环境的搭建过程(二)

安装二进制形式的GCC.rpm

下面介绍安装二进制形式的gcc(看起来比较麻烦):

 

事先确定要安装与系统相适应的rpm,由此找到下面这个网址:

http://mirrors./centos/4/apt/i386/RPMS.os/

里面很全,基本涵盖了安装gcc所需的所有rpm

 

注意:下文的 $ 表示终端。

 

1)安装gcc

下载:gcc-3.4.6-11.i386.rpm (不要下成gcc4,详见文章最后)

$ rpm -ivh gcc-3.4.6-11.i386.rpm

warning: gcc-3.4.6-11.i386.rpm: V3 DSA signature: NOKEY, key ID 443e1821

error: Failed dependencies:

        glibc-devel >= 2.2.90-12 is needed by gcc4-4.1.2-44.EL4.i386

        libgomp = 4.1.2-44.EL4 is needed by gcc-3.4.6-11.i386.rpm

Suggested resolutions:glibc-devel-2.3.4-2.43.i386.rpm

libgomp-4.1.2-44.EL4.i386.rpm

 

根据错误信息→1-11-2

1-1)更新glibc-devel

下载:glibc-devel-2.3.4-2.43.i386.rpm

$ rpm -ivh glibc-devel-2.3.4-2.43.i386.rpm

warning: glibc-devel-2.3.4-2.43.i386.rpm: V3 DSA signature: NOKEY, key ID 443e1821

error: Failed dependencies:

        glibc-headers is needed by glibc-devel-2.3.4-2.43.i386

        glibc-headers = 2.3.4-2.43 is needed by glibc-devel-2.3.4-2.43.i386

    Suggested resolutions: glibc-headers-2.3.4-2.43.i386.rpm

 

根据错误信息→1-1-1

1-1-1)安装glibc-headers

下载:glibc-headers-2.3.4-2.39.i386.rpm

$ rpm -ivh glibc-headers-2.3.4-2.39.i386.rpm

warning: glibc-headers-2.3.4-2.43.i386.rpm: V3 DSA signature: NOKEY, key ID 443e1821

error: Failed dependencies:

        kernel-headers is needed by glibc-headers-2.3.4-2.43.i386

        kernel-headers >= 2.2.1 is needed by glibc-headers-2.3.4-2.43.i386

    Suggested resolutions: glibc-kernheaders-2.4-9.1.103.EL.i386.rpm

 

根据错误信息→1-1-1-1

1-1-1-1)安装glibc-kernheaders

下载:glibc-kernheaders-2.4-9.1.103.EL.i386.rpm

$ rpm -ivh glibc-kernheaders-2.4-9.1.103.EL.i386.rpm

 

返回1-1-1):

$ rpm -ivh glibc-headers-2.3.4-2.39.i386.rpm

 

返回1-1):

$ rpm -ivh glibc-devel-2.3.4-2.43.i386.rpm

 

1-2)更新libgomp

下载:libgomp-4.1.2-44.EL4.i386.rpm

$ rpm -ivh libgomp-4.1.2-44.EL4.i386.rpm

 

返回1):

$ rpm -ivh gcc4-4.1.2-44.EL4.i386.rpm

 

 

强烈注意,下载gcc时不要下成gcc4,不然又是一个大大的杯具~

安装完成,查看 $ gcc -v ,显示:-bash: gcc: command not found

偶迈嘎!又$ rpm -q gcc,显示:package gcc is not installed

Why?没理由啊……

百度、Google一通下来,终于被牛人一语惊醒:

 Linux下C开发环境的搭建过程(二)

$ gcc4  -v,终于有回音了:

gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)

内牛满面跪拜此帖:http://www./bbs/archiver/63528.html

还是那句话,一味的追求新鲜,只会让自己步履维艰。我还是用回我的gcc3吧……%>_

 

-----------------------------------------------

 LinuxC开发环境的搭建过程(三)

                       ——安装glibc

 

有些软件可能要求系统的 Glibc 高于某个版本才可以正常运行,如果您的 Glibc 低于要求的版本,为了运行这些软件,您就不得不升级您的 Glibc了。比如:

qq: error while loading shared libraries: requires glibc 2.5 or later dynamic linker

 

您可以寻找已经编译好的rpm包或者使用源代码的方式升级Glibc

 

RPM包方式安装glibc

RPM虽然比较容易安装,但就是依赖问题不好解决。给出一个下载地址:

http://mirrors./centos/5.5/os/i386/CentOS/

$ rpm –ivh glibc-2.5-49.i386.rpm

 

不过我用的是CentOS 4.8,貌似不能兼容……

error: Failed dependencies:

        glibc-common = 2.5-49 is needed by glibc-2.5-49.i386

        glibc > 2.3.4 conflicts with glibc-common-2.3.4-2.43.el4_8.3.i386

 

安装完成后,可以查看是否已升级:

$ ls -l /lib/libc.so.6

lrwxrwxrwx 1 root root 11 10-08 22:08 /lib/libc.so.6 -> libc-2.5.so

 

编译安装glibc

下载glibc

[root@localhost test]# pwd

/test

[root@localhost test]# wget  http://ftp./gnu/glibc/glibc-2.9.tar.bz2

 

下载glibc-linuxthreads

[root@localhost test]# wget http://ftp./gnu/glibc/glibc-linuxthreads-2.5.tar.bz2

 

解压

[root@localhost test]# tar -jvxf glibc-2.9.tar.bz2

[root@localhost test]# cd glibc-2.9

[root@localhost glibc-2.9]# tar -jvxf ../glibc-linuxthreads-2.5.tar.bz2

 

配置

[root@localhost glibc-2.9]# cd ..

[root@localhost test]# export CFLAGS="-g -O2 -march=i486"

[root@localhost test]# mkdir glibc-build

[root@localhost test]# cd glibc-build

[root@localhost glibc-build]# ../glibc-2.9/configure --prefix=/usr --disable-profile --enable-add-ons  --with-headers=/usr/include --with-binutils=/usr/bin

 

安装

[root@localhost glibc-build]# make

[root@localhost glibc-build]# make install

 

安装编译过程中需要注意三点:

1、要将glibc-linuxthreads解压到glibc目录下。

2、不能在glibc当前目录下运行configure

3、否则如果出现错误:error "glibc cannot be compiled without optimization",需要加上优化开关:[root@localhost test]# export CFLAGS="-g -O2 -march=i486"

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多