GCC的安装

环境RedHatLinuxAS5
安装盘:RedHatLinuxAS5正式版DVD.iso

查看gcc版本:
# gcc -v

检查是否安装rpm包
# rpm -qa | grep rpm_name
# rpm -qa | grep gcc

加载:
# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom/
卸载:
# umount /mnt/cdrom/

进入cdrom,查找gcc安装包。在Server目录下
# cd /mnt/cdrom/
# find -iname gcc*

安装gcc:
# rpm -ivh Server/gcc-4.1.1-52.el5.i386.rpm

warning: Server/gcc-4.1.1-52.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
        glibc-devel >= 2.2.90-12 is needed by gcc-4.1.1-52.el5.i386
        libgomp = 4.1.1-52.el5 is needed by gcc-4.1.1-52.el5.i386
        libgomp.so.1 is needed by gcc-4.1.1-52.el5.i386

先安装所依赖的包。
# rpm -ivh Server/glibc-headers-2.5-12.i386.rpm
# rpm -ivh Server/glibc-devel-2.5-12.i386.rpm
# rpm -ivh Server/libgomp-4.1.1-52.el5.i386.rpm
再# rpm -ivh Server/gcc-4.1.1-52.el5.i386.rpm

安装gcc-c++:
# rpm -ivh Server/libstdc++-devel-4.1.1-52.el5.i386.rpm
# rpm -ivh Server/gcc-c++-4.1.1-52.el5.i386.rpm

安装gdb:
# rpm -ivh Server/gdb-6.5-16.el5.i386.rpm

查看RPM包安装路径:
rpm -ql rpm_name

==========================

GCC的使用

Hello World

#include <stdio.h>
int main(void)
{printf("Hello, world.\n");return 0;
}

保存成main.c,然后编译执行:
$ gcc main.c
$ ./a.out
Hello, world.

如果不想把文件名叫a.out,可以用gcc的-o参数自己指定文件名:
$ gcc main.c -o main

打开gcc的-Wall选项,也就是让gcc提示所有的警告信息,不管是严重的还是不严重的。
$ gcc -Wall main.c

==========================

链接外部库

库是预编译的目标文件(object files)的集合,它们可被链接进程序。静态库以后缀为‘.a’的特殊的存档文件(archive file)存储。标准系统库可在目录 /usr/lib 与 /lib 中找到。比如,在类 Unix 系统中 C 语言的数学库一般存储为文件 /usr/lib/libm.a。该库中函数的原型声明在头文件 /usr/include/math.h 中。C 标准库本身存储为 /usr/lib/libc.a,它包含 ANSI/ISO C 标准指定的函数,比如‘printf’。对每一个 C 程序来说,libc.a 都默认被链接。

调用数学库 libm.a 中 sqrt 函数的的例子:
math.c

#include <math.h>
#include <stdio.h>int main (void)
{double x = sqrt (4.0);printf ("The value of sqrt(4.0) is %f\n", x);return 0;
}

# gcc -Wall math.c /usr/lib/libm.a -o math
# ./math
The value of sqrt(4.0) is 2.000000

如果不 加上/usr/lib/libm.a 会报错, 提示没有定义sqrt

因为函数 sqrt,未在本程序中定义也不在默认库‘libc.a’中;除非被指定,编译器也不会链接‘libm.a’。
为使编译器能将 sqrt 链接进主程序‘math.c’,我们需要提供数学库‘libm.a’。一个容易想到但比较麻烦的做法是在命令行中显式地指定它,即像上面那样。函数库‘libm.a’包含所有数学函数的目标文件,比如sin,cos,exp,log及sqrt。链接器将搜索所有文件来找到包含sqrt的目标文件。

一旦包含 sqrt 的目标文件被找到,主程序就能被链接,一个完整的可执行文件就可生成了.
可执行文件包含主城许的机器码以及函数库‘libm.a’中sqrt 对应的机器码。
为避免在命令行中指定长长的路径,编译器为链接函数库提供了快捷的选项‘-l’。例如,下面的命令

代码:
# gcc -Wall math.c -lm -o math      /*与 gcc -Wall math.c -lm -o math是样的效果*/
一般来说,选项 -lNAME使链接器尝试链接系统库目录中的函数库文件 libNAME.a。一个大型的程序通常要使用很多 -l 选项来指定要链接的数学库,图形库,网络库等。

转载于:https://www.cnblogs.com/rbotao/archive/2010/06/23/1763042.html

Linux下GCC的安装,GCC链接外部库相关推荐

  1. linux下Yum方式安装gcc

    linux下Yum方式安装gcc学习记录 从CentOS7的系统安装镜像中取出需要的rpm包(也可以通过别的方式获取):解压镜像文件,进入"Packages"目录,里面很多rpm包 ...

  2. Linux下的ELF文件、链接、加载与库(含大量图文解析及例程)

    Linux下的ELF文件.链接.加载与库 链接是将将各种代码和数据片段收集并组合为一个单一文件的过程,这个文件可以被加载到内存并执行.链接可以执行与编译时,也就是在源代码被翻译成机器代码时:也可以执行 ...

  3. Linux下curses的安装和使用

    Linux下curses的安装和使用 前言 光标库主要函数功能 安装光标库(Curses) BBS 贪吃蛇 总结 前言 本文讲解了curses的一些主要函数的功能及安装. 光标库主要函数功能 init ...

  4. Ubuntu Linux下vimplus的安装及使用

    文章目录 Ubuntu Linux下vimplus的安装及使用 1. 安装 1.1 版本要求 1.2 安装步骤 1.3 个性化 2. 设置字体 3. 运行测试一下 4. 主要功能快捷键 附录 插件相关 ...

  5. linux下从git获取有权限的代码,linux下从源代码安装git

    之所以有这样的需求,是因为部分预安装的git版本太低,很多功能没有并且安全性存在问题. 比如git submodule add xxx@host:yyy.git必须在父repo的root目录安装,而新 ...

  6. Linux下cacti的安装RedHat9,RedHat AS4

    Linux下cacti的安装RedHat9,RedHat AS4 2007-12-22 21:47:28   Cacti安装手册         第一步. Cacti的架构  第三步. Cacti简介 ...

  7. linux apache 安装 rewrite,linux下单独编译安装Apache rewrite_module

    Redhat linux下单独编译安装Apache rewrite_module Apache已经编译安装完了,今天弄了个lifebox,装完后发现必须得用rewrite,所以就给它装了个~~ 找到a ...

  8. Linux下Nginx编译安装过程详解

    Linux下Nginx编译安装过程详解 一.Nginx介绍 二.Nginx源码下载 1.打开Nginx官网 2.下载官网的源码包 三.Nginx源码安装 1.解压源码包 2.安装开发包组及环境 3.编 ...

  9. Linux下OpenSSL的安装与使用

    Linux下OpenSSL的安装与使用 OpenSSL简介 OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux.Windows.Mac OS ...

最新文章

  1. Android 自定义View之3D骰子旋转
  2. SpringMVC中利用HandlerExceptionResolver完成异常处理
  3. linux线程和进程详解,linux 进程和线程简介
  4. 《Python游戏编程快速上手》第十章TicTacToe
  5. The Preliminary Contest for ICPC Asia Nanjing 2019ICPC南京网络赛
  6. 加减法叫做什么运算_小学四则运算基础知识,赶快给孩子存下吧!
  7. Iptables-Fail2ban处理bind 非法***
  8. Chrome浏览器必装的扩展工具
  9. 查询mysql各个库和表的大小并按大小输出
  10. 2017282110261-高级软件工程第二次作业
  11. python多进程爬虫保存数据_Python多进程爬虫东方财富盘口异动数据+Python读写Mysql与Pandas读写Mysql效率对比...
  12. 微信小程序srt_微信小程序微商城(八):缓存实现商品购物车功能
  13. JS方面重点摘要(一)
  14. pymysql连接数据库
  15. CleanMyMac下载正版清理苹果mac系统电脑蓝奏云
  16. Docker与容器化-04-Docker私有仓库与镜像迁移备份
  17. 芥子纳须弥——浅谈数据压缩技术
  18. 百度地图 3.0 WEB离线开发
  19. win10同时安装wps和office时,如何设置默认应用为office!!!
  20. 小米运动同步到Google Fit健身, 解决睡眠和体重不同步的情况

热门文章

  1. pmp每日三题(2022年3月1日)
  2. PHP字符串增强加密
  3. 下载离线插件包 谷歌浏览器的方法
  4. solaris下同一机器2个实例之间切换
  5. 用Java访问带有Kerberos认证的HBase
  6. R语言里面的循环变量
  7. V4L2框架分析学习二
  8. android roboto字体下载,Android字体设置及Roboto字体使用方法
  9. Java黑皮书课后题第2章:*2.19(几何:三角形面积)编写程序,提示用户输入三角形的三个点(x1, y1)(x2, y2)(x3, y3),然后显示它的面积
  10. 小白重装系统教程_重装系统教程,小编教你怎么重装win10系统