编译器首页投稿(暂停使用,暂停投稿)我用 Linux

Linux GCC编译器和GDB调试器

2017-06-21  本文已影响1320人  故事狗

GCC编译器

GCC是一个交叉平台的编译器,我想大家并不会觉得陌生。C/C++开发的时候很多时候都会用到GCC来进行编译。

GCC编译的流程

文件后缀 说明
.c C语言源文件
.a 有目标文件构成的档案库文件
.C .cc .cxx .cpp C++源程序
.h 源程序包含的头文件
.i 经过预处理的C程序
.ii 经过预处理的C++程序
.m Objective-C源程序
.o 变异后的目标文件(二进制文件,但未链接,不能直接执行)
.s 汇编语言的程序
.S 经过预处理的汇编程序
编译的流程图

GCC常用编译选项说明

GCC编译的函数库

函数库分为静态库和动态库两种。
静态库,指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件较大,但运行时就不需要其他的库文件了。后缀一般为“.a”。
动态库,与静态库相反,在编译链接时没有把库文件的代码加入到可执行文件中去,而是在程序执行时链接文件加载库,这样可以节省系统的开销。动态库的后缀一般为“.so”

项目 Linux Windows
目标模块 func.o FUNC.obj
静态库 lib.a LIB.lib
动态库 lib.so LIB.dll
程序 Program Program.exe
删除动态库后执行的报错信息

其实也可以选择不把so文件放在系统的库里面,那么就需要手动添加搜索的路径

$ gcc -L /home/ test.c -l hello star.c -o my 使用不在系统目录下的动态库的编译

$ vim /etc/ld.so.conf 配置自动搜索动态库的路径
添加/home/ 添加路径即可

添加路径到配置文件

$ ldconfig 重新配置动态库链接信息

实际操作 实操过程

通过nm xxx.a可以查看该静态库中的函数都有哪些

动态编译和静态编译后的可执行文件的大小对比

由上图可以看出mx(静态编译)比mx.d(动态编译)的可执行文件要大

GDB调试

语法$ gdb [参数] filename

调试界面
上一篇下一篇

猜你喜欢

热点阅读