新1期_009课_gcc编译器学习

一、gcc的常用选项

  1. gcc使用方法
    gcc 【选项】 【文件名】
  2. gcc -v :查看gcc的版本,显示gcc的详细执行过程
    -o :可以指定输出的文件名
    -E :只是预处理,不会编译、汇编和链接(一般默认会进行预处理)
    -S :只是编译,不会汇编和链接
    -c :编译和汇编,不会链接
  3. gcc编译可执行程序的方式
    1)gcc hello.c 将生成a.out文件,不推荐
    2)gcc -o hello hello.c 将生产hello可执行文件,推荐使用
    3)gcc -c -o hello.o hello.c
    gcc -o hello hello.o
  4. gcc编译的详细过程
    1 ) 预处理
    预处理将宏定义展开,将条件编译选择,将c语言中的#define #ifdef等命令进行处理,生产hello.i 文件
    gcc -E -o hello.i hello.c
    2)编译
    只编译,不会汇编或链接,生产hello.s
    gcc -S -o hello.s hello.i
    3)汇编
    将汇编代码hello.s翻译成elf格式的机器代码,生成hello.o的obj文件;
    gcc -c -o hello.o hello.s
    4)链接
    将汇编生产的obj文件,系统库的obj文件和库文件链接起来,生产可执行文件hello
    gcc -o hello hello.o

二、gcc的一些特殊选项
5. -nostdlib
不链接系统标准启动文件和标准库文件,只把指定文件传递给连接器。这个选项常用于编译内核,bootloader 等程序,因为内核和bootloader不需要启动文件、标准库文件;
gcc -v -nostdlib -o hello hello.o
一般的程序编译时使用-nostdlib选项时,会提示失败,这是gcc没有链接系统标准启动文件和标准库文件。对于应用程序才需要系统标准启动文件和标准库文件;
6. 动态链接和静态链接
gcc 一般默认的是动态链接,可以用ldd hello查看hello应用程序使用到的动态链接文件;
1)动态链接(默认动态链接)
动态链接使用动态链接库进行链接,生成的程序在执行的时候需要加载所需的动态库才能运行;
动态库链接生产的程序较小,但是必须依赖所需的动态库,否则不能编译;
2)静态链接
静态链接使用静态库进行链接,生产的程序包括程序所需要的所有库,可以直接运行,静态链接生产的程序体积较大;
gcc -static -o static_hello hello.o

猜你喜欢

转载自blog.csdn.net/weixin_42547860/article/details/89420441