1st.初识GCC——关于GCC编译器的相关语法与介绍

    一个C文件要变成可执行的文件,需要经过四个过程

    • 预处理(处理以“#”为开头的命令)
    • 编译(将.c .i等文件翻译成汇编代码)
    • 汇编(将汇编代码翻译成机器代码)
    • 连接(将生成的多个目标文件(.o文件)连接起来,生成可执行文件)
 
     主要用到的工具叫做arm-linux-gcc,arm-linux-ld,本次学习的是gcc工具。
        
     几条常用命令选项:
 
     -E:        预处理后即停止
     -S:        编译后不汇编
     -c:        预处理+编译+汇编,但不连接
     -o file:    指定输出文件为file。无论哪个环节,这个选项都可以使用
 
     编译单个文件的语句,只需要一句话即可
1 gcc -o hello hello.c    
     这条指令,即直接将C文件生成成可执行文件"hello"
    虽然这里是一条指令,但已经包含了几个步骤了。
 
1 gcc -E -o hello.i hello.c //对C文件做预处理
2 gcc -S -o hello.s hello.i //进行编译,生成汇编文件
3 gcc -c -o hello.o hello.s //对汇编代码编译成目标文件
4 gcc -o hello hello.o      //生成可执行程序hello
 
 
对于多个文件,需要进行逐个编译,再做最后的连接。
1 gcc -c -o mian.o mian.c
2 gcc -c -o sub.o sub.c
3 gcc -o test mian.o sub.o
 
 
也可以直接连接编译生成
1 gcc -o test mian.c sub.c
 
    
    
 
   其中发现的几个小问题并且已解决:
 
    关于arm-linux-gcc与gcc的区别
    在编译过程中分别试了一下两条代码
    
 代码<a>
1 arm-linux-gcc -o hello hello.c
 代码<b>
1 gcc -o hello hello.c
两者自然都能生成可执行文件[hello],但在Ubuntu上运行时,却是代码<b>可以运行,而<a>不可执行。
后有网上答案说:arm-linux-gcc编译出来的是在arm上使用的,gcc是在PC上使用的。自然不同。
 
 
 
    
    





原文地址:https://www.cnblogs.com/asam/p/6351861.html