您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页Linux环境中C语言的开发环境和工具----gcc

Linux环境中C语言的开发环境和工具----gcc

来源:华佗小知识


Linux环境中C语言的开发环境和工具----gcc

➢ 在Linux中,GNU(GNU,名称来自Gnu's Not Unix\"的缩写,一个类UNIX的操作系统,由GNU计划推动,目标在于创建一个完全兼容于UNIX的自由软件环境。) tools是主要的程序的开发工具,其最重要的组成部分是GCC(GNU Compliler Collection)

➢ GCC能完成从C C++ Objective-C等源文件向运行在特定CPU硬件上的目标代码的转换。对于通用计算机,使用GCC生成x86的可执行代码;对于嵌入式开发系统,使用交叉编译的GCC,生成目标机可以执行的程序。

➢ GCC对默认文件的处理包含了文本文件和二进制文件两种。

1. 文本文件包括:

 *.c

 *.i

 *.s

 *.h

2. 二进制文件包括

 *.o 目标文件

 *.so 动态库

 *.a 静态库

➢ GCC是一组工具的组合,包含预处理器、编译器、汇编器、连接器等部分。

➢ GCC生成应用程序分为四步

1. 预处理,生成.i文件(预处理器cpp) -E

2. 编译,将预处理的文件转换为汇编语言,生成.s文件(编译器gcc) -S

3. 汇编,将汇编代码生成目标代码,即机器代码,生成.o文件(汇编器as) -c

4. 连接,由各个文件的目标代码,生成可执行程序(连接器ld)

5. (课本p41 图4-1)

➢ 在一般gcc程序的生成过程中,从C语言到最终的可执行程序,主要分两个阶段:

1. 就各个C语言的源文件生成目标文件*.o

2. 将各个目标文件进行连接生成可执行程序

➢ gcc常用的参数:

1. –o FILE 指定输出文件的文件名

2. –g 表示包含调试信息

3. –Wall 输出所有的警告

4. –IDIRECTORY 指定搜索头文件的路径

5. –llibrary 指定连接库文件

6. –LDIRCTORY 指定连接库所需要的路径

7. –static 生成静态连接的可执行程序

➢ 动态库

1. 使用gcc连接工具可以生成动态库,动态库的扩展名一般为*.so

2. 态库存在

动态库不需要被连接到可执行程序中,不会增加可执行程序的大小,但是运行的时候仍然需要动

3. 修改环境变量 /etc/profile(对所有用户有效) /root/.bashrc(对当前用户有效)

4. export LD_LIBRARY_PATH=./:$ LD_LIBRARY_PATH

5. source .bashrc

6. 动态库举例(main.c myavg.c mysum.c a.h)

 gcc myavg.c mysum.c -c (生成myavg.o 和 mysum.o )

 gcc myavg.o mysum.o -o libtest.so -shared

(生成libtest.so)

 gcc main.c -o main -L /root/linux_c/gcc -ltest (生成main可执行文件)

➢ gcc的二进制工具

1. ar(归档工具),ar工具用于建立、修改、提取归档文件(archive),一个归档文件是包含多个

目标文件的单个文件,它也被称为静态库。

2. gcc工具系列中,ar工具常用于生成静态库文件,静态库生成后,可直接被应用程序连接

 -r 表示库中插入模块,同名时替换

 -v 显示执行操作选项的附加信息

 -t 查看静态库内容

 -d 删除库中的成员

 -x 提取静态库文件中的各个目标文件

 在静态库文件中,a表示追加文件,r表示替换文件

3. 静态库举例(main.c myavg.c mysum.c a.h)

 gcc myavg.c mysum.c –c (生成myavg.o 和 mysum.o)

 ar -rv libtest.a myavg.o mysum.o (生成libtest.a)

 ar -t libtest.a

 ar -d libtest.a myavg.o

 ar -rv libtest.a myavg.o mysum.o

 (查看myavg.o mysum.o显示的标记)

 ar -x libtest.a

 gcc main.c -o main -L /root/linux_c/gcc/ -ltest

 静态库和动态库的基本概念: 静态库,是在可执行程序连接时就已经加入到执行码中,在物

理上成为执行程序的一部分;使用静态库编译的程序运行时无需该库文件支持,哪里都可以用,但是生成的可执行文件较大。动态库,是在可执行程序启动时加载到执行程序中,可以被多个可执行程序共享使用。使用动态库编译生成的程序相对较小,但运行时需要库文件支持,如果机器里没有这些库文件就不能运行。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务