美文网首页
Linux编译-GCC以及Makefile

Linux编译-GCC以及Makefile

作者: 執著我們的執著 | 来源:发表于2018-08-14 23:51 被阅读0次

    gcc

    1、一个C/C++文件的编译过程,经过
    预处理(preprocessing)  -> 编译(compilation) -> 汇编(assembly) -> 链接(linking)
    
    . 文件 -> .s 文件 -> .o 文件 -> 可执行文件
    
    示例:

    (1) 预处理,生成预编译文件 ( . 文件)

     gcc -E hello.c -o hello.i
    

    (2)编译,生成汇编代码 ( .s 文件)

    gcc -S hello.i -o hello.s
    

    (3)汇编,生成目标文件 (.o 文件)二进制文件,机器码

    gcc -C hello.s -o hello.o
    

    (4)链接,生成可执行文件,elf文件

    gcc hello.o -o hello
    

    一步到位 :gcc hello.c -o hello

    2、编译选项

    常用选项

    选项 含义
    -v 查看gcc编译器的版本,显示gcc执行时的详细过程
    -o <file> 指定输出文件名为file
    -E 只预处理,不编译、汇编、链接
    -S 只编译,不会汇编和链接
    -C 编译和汇编,不会链接
    -g 编译[debug]版本 gcc hello.c -g -o hello
    -O1/O2/O3 编译[优化]
    3、相关补充

    Q1: 如果 .h 文件和 .c 文件不在同一级目录,怎么编译?假设hello.h在hello.c的上一级目录

    Q2: 如果 hello 需要使用 libpthread.so 中的函数?

    Q3: 如果 hello 需要使用 /home/lib 中的 libtest.so 中的函数?


    A1:
    gcc hello.c -o hello -I..
    编译选项 -I : 指定后面的路径为优先寻找头文件的目录路径

    A2:
    gcc hello.c -o hello -I.. -lpthread
    编译选项 -l (-lpthread) : 寻找动态链接库文件libpthread.so(也就是文件名去掉前缀和后缀所代表的库文件,即指定 库 的名称)

    A3:
    gcc hello.c -o hello -I.. -L/home/lib -ltest
    编译选项 -L : 指定 库的路径

    -I ; -l ; -L 三大选项
    

    makefile整理

    相关文章

      网友评论

          本文标题:Linux编译-GCC以及Makefile

          本文链接:https://www.haomeiwen.com/subject/lvzubftx.html