2018-02-24 17:15:21 github_38263022 阅读数 285

所有Linux命令均用等线正文斜体+背景阴影表示,以示区分。

1       gcc简介及使用场景

2       gcc 安装步骤(可参照第五点,使用shell脚本进行简化安装)

按照下述步骤依次安装。

2.0  下载gcc安装需要的rpm包

2.1       rpm-ivh ppl-0.10.2-11.el6.x86_64.rpm

2.2       rpm-ivh cloog-ppl-0.15.7-1.2.el6.x86_64.rpm

2.3       rpm-ivh mpfr-2.4.1-6.el6.x86_64.rpm

2.4       rpm-ivh cpp-4.4.7-4.el6.x86_64.rpm

2.5       rpm-ivh kernel-headers-2.6.32-431.el6.x86_64.rpm

2.6       rpm-ivh glibc-headers-2.12-1.132.el6.x86_64.rpm

2.7       rpm-ivh glibc-devel-2.12-1.132.el6.x86_64.rpm

2.8       rpm-ivh gcc-4.4.7-4.el6.x86_64.rpm

2.9       rpm-ivh libstdc++-devel-4.4.7-4.el6.x86_64.rpm

2.10    rpm-ivh gcc-c++-4.4.7-4.el6.x86_64.rpm

3       gcc 安装验证

写一个简单的C程序,并命令为hello.c,使用gcc-c hello.c && ./a.out运行    

4       常用gcc 命令

4.1       gcc 版本查询 gcc –version,注意有两个短横杠

5       简单的shell脚本,用于安装在服务器上安装gcc/g++,命名为gccInstall.sh:

#!/bin/bash

#auther:luolin

#命令执行方法:sh gccInstall.sh parma1

#参数一param1是存放安装包rpm的路径

echo "dir is: $1"

#如果只有gcc的rpm安装包,则可以执行下列一条语句即可

# rpm -ivh $1/*.rpm

rpm -ivh $1/ppl-0.10.2-11.el6.x86_64.rpm

rpm -ivh $1/cloog-ppl-0.15.7-1.2.el6.x86_64.rpm

rpm -ivh $1/mpfr-2.4.1-6.el6.x86_64.rpm

rpm -ivh $1/cpp-4.4.7-4.el6.x86_64.rpm

rpm -ivh $1/kernel-headers-2.6.32-431.el6.x86_64.rpm

rpm -ivh $1/glibc-headers-2.12-1.132.el6.x86_64.rpm

rpm -ivh $1/glibc-devel-2.12-1.132.el6.x86_64.rpm

rpm -ivh $1/gcc-4.4.7-4.el6.x86_64.rpm

rpm -ivh $1/libstdc++-devel-4.4.7-4.el6.x86_64.rpm

rpm -ivh $1/gcc-c++-4.4.7-4.el6.x86_64.rpm


2010-11-25 23:11:00 zyysql 阅读数 28706


一、首先从GNU上下载GCC包,ftp://gcc.gnu.org/,我使用的是最新发布版本gcc-4.5.1.tat.gz,

1)  tar zxvf gcc-4.5.1.tar.gz

2)  cd gcc-4.5.1

3) ./congigure

此时会出现这样的错误:
                        gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+
        从错误中可以看出:GCC编译需要GMP, MPFR, MPC这三个库,我使用的版本为gmp-4.3.2,mpfr-2.4.2和mpc-0.8.1。这三个包从下面的地址下载:
http://gmplib.org/,http://www.mpfr.org/,http://www.multiprecision.org/
 
 二、安装GMP时也出现了错误:
                              No usable m4 in $PATH or /usr/5bin (see config.log for reasons).
        由此可以看出是缺少M4文件。可以去这里下载:http://ftp.gnu.org/gnu/m4/  。我这里下载了m4-1.4.1.tar.gz  
1)  tar zxvf m4-1.4.1.tar.gz
2)  cd m4-1.4.1
3)  ./configure
4)  make
5)  make check(强烈建议检查,确保正确)
6)  make install(需要root,建议在root中安装)


三、有了M4就可以装别的了。由于MPFR和MPC都依赖于GMP包,所以首先安装GMP。
1)tar jxvf gmp-4.3.2.tar.bz2
2)cd gmp-4.3.2
3)./configure
4)make
5)make check
6)  make install

 

四、安装MPFR
1)  tar jxvf mpfr-2.4.2.tar.bz2
2)  cd mpfr-2.4.2
3)  ./configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/local/lib
4)  make
5)  make check
6)  make install

五、安装MPC

1)  tar zxvf mpc-0.8.1.tar.gz
2)  cd mpc-0.8.1
3)  ./configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/local/lib
4)  make
5) ldconfig -v(出现:error while loading shared libraries: libmpfr.so.1: cannot open shared objec,可以自己去man ldd 和ldconfig)
6) make check
7)  make install


六、这几个库的默认位置是/usr/local/include和/usr/local/lib,GCC编译时可能会找不到这三个库,需要确认库位置是否在环境变量LD_LIBRARY_PATH中,查看环境变量内容可以用命令
                $echo $LD_LIBRARY_PATH
        设置该环境变量命令如下:
                $export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
        现在开始安装GCC
1) tar xvf gcc-4.5.1.tar.gz
2) cd gcc-4.5.1
3) ./configure
4) make
5) make check
6) sudo make install

经过较长时间(我等了近一个小时)等待就可以编译完成。

 

 

 

2015-12-15 11:06:13 lihuajie1003 阅读数 884

1、Ctrl+Alt+T进入命令界面

2、build-essential 软件包,为编译程序提供必需软件包的列表信息,这样软件包才知道头文件、库函数在哪里。还会下载依赖的软件包,安装gcc/g++/gdb/make 等基本编程工具,最后才组成一个开发环境。

<span style="font-size:18px;">sudo apt-get install build-essential</span>
3、简单编译
<span style="font-size:18px;">//test.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}</span>
<span style="font-size:18px;">gcc test.c -o test</span>
3.1预处理
<span style="font-size:18px;">gcc -E test.c -o test.i 或 gcc -E test.c</span>
3.2编译为汇编代码(Compilation)
<span style="font-size:18px;">gcc -S test.i -o test.s</span>
3.3汇编(Assembly)
<span style="font-size:18px;">gcc -c test.s -o test.o</span>
3.4连接(Linking)
<span style="font-size:18px;">gcc test.o -o test</span>

4、多个程序文件的编译

<span style="font-size:18px;">gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test</span>
5、检错

<span style="font-size:18px;">gcc -pedantic illcode.c -o illcode
gcc -Wall illcode.c -o illcode
gcc -Werror test.c -o test</span>
6、库文件连接
6.1编译成可执行文件
gcc –c –I /usr/dev/mysql/include test.c –o test.o
6.2链接
gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test
6.3强制链接时使用静态链接库
gcc –L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test
2. 再找gcc的环境变量LIBRARY_PATH
3. 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的
2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
4. 默认的动态库搜索路径/lib
5. 默认的动态库搜索路径/usr/lib
LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径

示例程序如下:

这个程序,一步到位的编译指令是:

实质上,上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。

可以输出test.i文件中存放着test.c经预处理之后的代码。打开test.i文件,看一看,就明白了。后面那条指令,是直接在命令行窗口中输出预处理后的代码.

gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdio.h 文件中的内容插入到test.c中了。

预处理之后,可直接对生成的test.i文件编译,生成汇编代码:

gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。

对于上一小节中生成的汇编代码文件test.s,gas汇编器负责将其编译为目标文件,如下:

gcc连接器是gas提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。附加的目标文件包括静态连接库和动态连接库。

对于上一小节中生成的test.o,将其与C标准输入输出库进行连接,最终生成程序test

在命令行窗口中,执行./test, 让它说HelloWorld吧!

通常整个程序是由多个源文件组成的,相应地也就形成了多个编译单元,使用GCC能够很好地管理这些编译单元。假设有一个由test1.c和 test2.c两个源文件组成的程序,为了对它们进行编译,并最终生成可执行程序test,可以使用下面这条命令:

gcc test1.c test2.c -o test

如果同时处理的文件不止一个,GCC仍然会按照预处理、编译和链接的过程依次进行。如果深究起来,上面这条命令大致相当于依次执行如下三条命令:

-pedantic编译选项并不能保证被编译程序与ANSI/ISO C标准的完全兼容,它仅仅只能用来帮助Linux程序员离这个目标越来越近。或者换句话说,-pedantic选项能够帮助程序员发现一些不符合 ANSI/ISO C标准的代码,但不是全部,事实上只有ANSI/ISO C语言标准中要求进行编译器诊断的那些情况,才有可能被GCC发现并提出警告。

除了-pedantic之外,GCC还有一些其它编译选项也能够产生有用的警告信息。这些选项大多以-W开头,其中最有价值的当数-Wall了,使用它能够使GCC产生尽可能多的警告信息。

GCC给出的警告信息虽然从严格意义上说不能算作错误,但却很可能成为错误的栖身之所。一个优秀的Linux程序员应该尽量避免产生警告信息,使自己的代码始终保持标准、健壮的特性。所以将警告信息当成编码错误来对待,是一种值得赞扬的行为!所以,在编译程序时带上-Werror选项,那么GCC会在所有产生警告的地方停止编译,迫使程序员对自己的代码进行修改,如下:

 开发软件时,完全不使用第三方函数库的情况是比较少见的,通常来讲都需要借助许多函数库的支持才能够完成相应的功能。从程序员的角度看,函数库实际上就是一些头文件(.h)和库文件(so、或lib、dll)的集合。。虽然Linux下的大多数函数都默认将头文件放到/usr/include/目录下,而库文件则放到/usr/lib/目录下;Windows所使用的库文件主要放在Visual Stido的目录下的include和lib,以及系统文件夹下。但也有的时候,我们要用的库不再这些目录下,所以GCC在编译时必须用自己的办法来查找所需要的头文件和库文件。

例如我们的程序test.c是在linux上使用c连接mysql,这个时候我们需要去mysql官网下载MySQL Connectors的C库,下载下来解压之后,有一个include文件夹,里面包含mysql connectors的头文件,还有一个lib文件夹,里面包含二进制so文件libmysqlclient.so

其中inclulde文件夹的路径是/usr/dev/mysql/include,lib文件夹是/usr/dev/mysql/lib

 首先我们要进行编译test.c为目标文件,这个时候需要执行

最后我们把所有目标文件链接成可执行文件:

Linux下的库文件分为两大类分别是动态链接库(通常以.so结尾)和静态链接库(通常以.a结尾),二者的区别仅在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。

默认情况下, GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static选项,强制使用静态链接库。

在/usr/dev/mysql/lib目录下有链接时所需要的库文件libmysqlclient.so和libmysqlclient.a,为了让GCC在链接时只用到静态链接库,可以使用下面的命令:

 

静态库链接时搜索路径顺序:

1. ld会去找GCC命令中的参数-L

动态链接时、执行时搜索路径顺序:

1. 编译目标代码时指定的动态库搜索路径

有关环境变量:


2011-09-02 20:49:06 lucianlv 阅读数 2041

源见: http://www.yygcui.com/install-gcc-4-5-1-in-debian-lenny.html


首先要做一些准备工作:

1.首先从GNU上下载GCC包,下载地址是http://gcc.gnu.org/,我使用的是最新发布版本4.5.1,首次编译安装时会出现这样的错误:
gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+

2.从编译错误中可以看出:GCC编译需要GMP, MPFR, MPC这三个库,这三个库可以从ftp://gcc.gnu.org/pub/gcc/infrastructure/上下载,我使用的版本为gmp-4.3.2,mpfr-2.4.2和mpc-0.8.1。当然这三个包也可以直接从各自官网上下载:
http://gmplib.org/http://www.mpfr.org/http://www.multiprecision.org/


编译安装:

1.MPFR和MPC都依赖于GMP包,所以首先安装GMP


$tar xvf gmp-4.3.2.tar.bz2
$cd gmp-4.3.2
$./configure (可以使用配置参数--prefix=指定安装位置,这里使用默认/usr/local/include和/usr/local/lib)
$make
$make check (这一步用来确保编译正确)
$sudo make install

2.安装MPFR


$tar xvf mpfr-2.4.2.tar.bz2
$cd mpfr-2.4.2
$./configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/local/lib
$make
$make check
$sudo make install

3.安装MPC


$tar xvf mpc-0.8.1.tar.gz
$cd mpc-0.8.1
$./configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/local/lib
$make
$make check
$sudo make install

至此,三个库安装完毕,都是安装在默认位置/usr/local/include和/usr/local/lib,为了防止GCC编译时找不到这三个库,需要确认库位置是否在环境变量LD_LIBRARY_PATH中,查看环境变量内容可以用命令


$echo $LD_LIBRARY_PATH

如果该环境变量中不包含/usr/local/lib库的位置,需要添加库位置,命令如下


$export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"

4.安装GCC


$tar xvf gcc-4.5.1.tar.gz
$cd gcc-4.5.1
$./configure
$make
$make check
$sudo make install

经过两三个小时的漫长等待,你可以体验GCC 4.5.1带来的快感了……
使用命令$gcc -v查看版本,你会看到

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/4.5.1/lto-wrapper
Target: i686-pc-linux-gnu
Configured with: ./configure
Thread model: posix
gcc version 4.5.1 (GCC)

最后再罗嗦几句,主要说明两点configure和make check,configure的配置参数是相当的多,以至于我从来就没有认真的看过,配置项说明一般在安装文件里的README或者INSTALL文件里,最常用的应该就是–prefix=指定安装路径的配置项了,像上面的安装过程中,如果configure gmp时使用了–prefix=/usr/local/gmp-4.3.2,那么下面用到gmp的配置就变成了–with-gmp=/usr/local/gmp-4.3.2,当然环境变量也要做相应的变化。make check的功能是检测编译是否正确,减少不必要的麻烦,编译成功的话,会看到这样的信息
====================
All 132 tests passed
====================
make[2]: Leaving directory ***************
make[1]: Leaving directory ***************
make[1]: Entering directory ***************
make[1]: Nothing to be done for `check-am’.
make[1]: Leaving directory ***************

***************表示测试的路径和当前的路径,主要看上面的信息All *** tests passed,说明没有错误,全部通过了 。

没有更多推荐了,返回首页