Linux:gcc编译器 | 动静态库的创建与使用

本文详细介绍了GCC(GNU Compiler Collection)在Linux环境下的使用,特别是gcc和g++的区别。讨论了预处理、编译、汇编和链接的过程,以及如何创建和使用静态库和共享库。通过示例展示了编译选项、链接库搜索路径,并解释了动态链接和静态链接的优缺点。同时,提到了`file`和`ldd`命令在检查文件链接方式和动态链接库中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


全文约 3036 字,预计阅读时长: 9分钟


gcc/g++

  • GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C等语言。
    • gcc是GCC中的GUN C Compiler(C 编译器)
    • g++是GCC中的GUN C++ Compiler(C++编译器)
  • 由于编译器是可以更换的,所以gcc不仅仅可以编译C文件。所以,更准确的说法是:gcc调用了C compiler,而g++调用了C++ compiler

gcc和g++的主要区别

  1. 对于 .c和.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)
  2. 对于 .c和.cpp文件,g++则统一当做cpp文件编译
  3. 使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL
  4. gcc在编译C文件时,可使用的预定义宏是比较少的
  5. gcc在编译cpp文件时/g++在编译c文件和cpp文件时(这时候gcc和g++调用的都是cpp文件的编译器),会加入一些额外的宏。
  6. 在用gcc编译c++文件时,为了能够使用STL,需要加参数 –lstdc++ ,但这并不代表 gcc –lstdc++ 和 g++等价,它们的区别不仅仅是这个。

gcc编译器

gcc可以分步骤编译,预处理,编译,汇编,最后链接生成可执行文件。可执行文件在Linux系统上一般表现为ELF目标文件(OBJ文件)。

通过下列方式编译可以得到,每一步处理之后的过程文件:
在这里插入图片描述

  也可以一步到位,两种写法:第一种方法编译时需要所有文件重新编译;而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译
1、多个文件一起编译
2、分别编译各个源文件,之后对编译后输出的目标文件链接。

//源文件 test.c testfun.c
#gcc testfun.c test.c -o test  //多个文件一起编译

//分别编译
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c   //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

一些选项

  • -static 此选项对生成的文件采用静态链接
  • -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统有动态库.
  • -O0-3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高。gcc -O1 test.c -o test
  • -w 不生成任何警告信息。
  • -Wall 生成所有警告信息。
  • -E :仅执行预处理(不要编译、汇编或链接)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值