literwave game.

csapp

Word count: 400Reading time: 1 min
2022/12/03

c语言编译过程

  • 预处理

    1
    g++ -E test.cpp -o test.i
  • 编译

    1
    g++ -S test.i - o test.s
  • 汇编

    1
    g++ -c test.s -o test.o
  • 链接

  • g++ test.o -o test
    
    1
    2
    3
    4
    5
    6
    7

    c语言编译参数

    * -O[n]优化源代码,一般用`-O2`

    * -l和-L

    链接glog库 g++ -lglog test.cpp -l 参数在/lib和/usr/lib/和/usr/local/lib里的库 如果库没有在上面三个目录里,需要使用-L参数指定库文件所在目录
    1
    2
    3

    * -I指定头文件搜索目录

    -I 默认在/usr/include目录
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    * -Wall 打印警告信息

    * -w 关闭警告信息

    * -std = c++11设置编译标准

    * -o 指定输出文件名

    * -D 定义宏

    在使用gcc/g++编译的时候定义宏 #include<stdio.h> int main() { #ifdef DEBUG printf("DEBUG LOG\n"); #endif printf("in\n"); } g++ -DDEBUG main.cpp 执行第一行打印
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    ### c语言生成静态库

    * 首先生成.o的二进制文件,然后用ar生成.a的文件`ar rs x.a x.o`,静态库以.a结尾的

    ### c语言生成动态库

    * `gcc x.cpp -I../include -fPIC -shared -o x.so` 等价于这两条分开
    * `gcc x.cpp -I../include -c fPIC`;`gcc -shared -o x.so x.o `

    ### 为什么需要生成库呢

    * 因为需要隐藏实现细节,这样就可以封装给别人用,别人看不到源代码

    ### 动态库和静态库的区别

    * 静态库可以直接运行

    ```bash
    ./xxx
  • 动态库需要

    1
    LD_LIBRARY_PATH = src ./xx

gdb调试器

  • g++ -g xx.cpp -o a_yes_g

c语言分析器

  • (float (*h)() *h = 函数 h就是指向函数的指针
CATALOG
  1. 1. c语言编译过程
  2. 2. gdb调试器
  3. 3. c语言分析器