gcc 一点点笔记

8 篇文章 0 订阅
7 篇文章 0 订阅

示例代码
File:a.c:
 #include <stdio.h>
 int main()
 {
 printf("hello\n");
 }
预编译过程:
  这个过程处理宏定义和include,并做语法检查。
  可以看到预编译后,代码从5行扩展到了910行。
  gcc -E a.c -o a.i
  cat a.c | wc -l
  5
  cat a.i | wc -l
  910
编译过程:
  这个阶段,生成汇编代码。
  gcc -S a.i -o a.s
  cat a.s | wc -l
  59
汇编过程:
  这个阶段,生成目标代码。
  此过程生成ELF格式的目标代码。
  gcc -c a.s -o a.o
  file a.o
  a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
链接过程:
  链接过程。生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。
  gcc a.o -o a
程序运行:
  ./a
  hello

选项:
-lLibname  :添加名为Libname的库文件,注意没有后缀。
-L Libdir :添加库搜索路径,Libdir。
-I Dir  :添加头文件搜索路径,此时先在该路径中搜索,然后按标准顺序搜索。
-include filename :添加头文件
-imacros filename :指明宏文件。宏文件有两种:gcc的宏文件和程序语言的宏文件。
-Dmacroname   :定义宏macroname
-Dmacroname=cpp  :定义宏macroname的值为cpp;
-Umacro    :取消macro的宏定义
-under     :取消所有的程序语言宏的宏定义,当然这里的宏是指用上面那三个(-imacros filename、-Dmacroname、-Dmacroname=cpp)选项定义的宏。
-g :生成可调试程序。

 


GCC文件处理过程:
预编译 :gcc -E main.c -o main.i
编译: gcc -S main.i -o main.s
 汇编 :gcc -c main.s -o main.o
连接 :gcc main.o -o main

ccl
as
ldd
cc

添加库:
-I dir
-L dir
-lname

生成库文件:
ar crv libtest.a test.o
gcc -shared -fPCI -o libtest.so test.o

系统头文件

系统库文件(变里为库文件的搜索路径)
/lib

/usr/include
/usr/lib

/usr/local/include
/usr/local/lib

 

注:目标文件与头文件没有任何关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值