Linux下GCC的安装,GCC链接外部库
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链接外部库相关推荐
- linux下Yum方式安装gcc
linux下Yum方式安装gcc学习记录 从CentOS7的系统安装镜像中取出需要的rpm包(也可以通过别的方式获取):解压镜像文件,进入"Packages"目录,里面很多rpm包 ...
- Linux下的ELF文件、链接、加载与库(含大量图文解析及例程)
Linux下的ELF文件.链接.加载与库 链接是将将各种代码和数据片段收集并组合为一个单一文件的过程,这个文件可以被加载到内存并执行.链接可以执行与编译时,也就是在源代码被翻译成机器代码时:也可以执行 ...
- Linux下curses的安装和使用
Linux下curses的安装和使用 前言 光标库主要函数功能 安装光标库(Curses) BBS 贪吃蛇 总结 前言 本文讲解了curses的一些主要函数的功能及安装. 光标库主要函数功能 init ...
- Ubuntu Linux下vimplus的安装及使用
文章目录 Ubuntu Linux下vimplus的安装及使用 1. 安装 1.1 版本要求 1.2 安装步骤 1.3 个性化 2. 设置字体 3. 运行测试一下 4. 主要功能快捷键 附录 插件相关 ...
- linux下从git获取有权限的代码,linux下从源代码安装git
之所以有这样的需求,是因为部分预安装的git版本太低,很多功能没有并且安全性存在问题. 比如git submodule add xxx@host:yyy.git必须在父repo的root目录安装,而新 ...
- Linux下cacti的安装RedHat9,RedHat AS4
Linux下cacti的安装RedHat9,RedHat AS4 2007-12-22 21:47:28 Cacti安装手册 第一步. Cacti的架构 第三步. Cacti简介 ...
- linux apache 安装 rewrite,linux下单独编译安装Apache rewrite_module
Redhat linux下单独编译安装Apache rewrite_module Apache已经编译安装完了,今天弄了个lifebox,装完后发现必须得用rewrite,所以就给它装了个~~ 找到a ...
- Linux下Nginx编译安装过程详解
Linux下Nginx编译安装过程详解 一.Nginx介绍 二.Nginx源码下载 1.打开Nginx官网 2.下载官网的源码包 三.Nginx源码安装 1.解压源码包 2.安装开发包组及环境 3.编 ...
- Linux下OpenSSL的安装与使用
Linux下OpenSSL的安装与使用 OpenSSL简介 OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux.Windows.Mac OS ...
最新文章
- Android 自定义View之3D骰子旋转
- SpringMVC中利用HandlerExceptionResolver完成异常处理
- linux线程和进程详解,linux 进程和线程简介
- 《Python游戏编程快速上手》第十章TicTacToe
- The Preliminary Contest for ICPC Asia Nanjing 2019ICPC南京网络赛
- 加减法叫做什么运算_小学四则运算基础知识,赶快给孩子存下吧!
- Iptables-Fail2ban处理bind 非法***
- Chrome浏览器必装的扩展工具
- 查询mysql各个库和表的大小并按大小输出
- 2017282110261-高级软件工程第二次作业
- python多进程爬虫保存数据_Python多进程爬虫东方财富盘口异动数据+Python读写Mysql与Pandas读写Mysql效率对比...
- 微信小程序srt_微信小程序微商城(八):缓存实现商品购物车功能
- JS方面重点摘要(一)
- pymysql连接数据库
- CleanMyMac下载正版清理苹果mac系统电脑蓝奏云
- Docker与容器化-04-Docker私有仓库与镜像迁移备份
- 芥子纳须弥——浅谈数据压缩技术
- 百度地图 3.0 WEB离线开发
- win10同时安装wps和office时,如何设置默认应用为office!!!
- 小米运动同步到Google Fit健身, 解决睡眠和体重不同步的情况
热门文章
- pmp每日三题(2022年3月1日)
- PHP字符串增强加密
- 下载离线插件包 谷歌浏览器的方法
- solaris下同一机器2个实例之间切换
- 用Java访问带有Kerberos认证的HBase
- R语言里面的循环变量
- V4L2框架分析学习二
- android roboto字体下载,Android字体设置及Roboto字体使用方法
- Java黑皮书课后题第2章:*2.19(几何:三角形面积)编写程序,提示用户输入三角形的三个点(x1, y1)(x2, y2)(x3, y3),然后显示它的面积
- 小白重装系统教程_重装系统教程,小编教你怎么重装win10系统