• 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上使用的。自然不同。
     
     
     
        
        





  • 相关阅读:
    初次接触json...
    vector algorithm find
    网站安全(13) ——目录穿越漏洞(Directory Traversal)
    网站安全(20) —— 语义URL攻击
    网站安全(7) —— PHP文件包含漏洞介绍
    让PHP更快的提供文件下载
    PHP中关于include()和require() 的区别问题
    PHP中 获取全路径的文件的扩展名
    MySQL varchar计算:求列的数目和计算N的最大值
    jmeter使用分享
  • 原文地址:https://www.cnblogs.com/asam/p/6351861.html
Copyright © 2020-2023  润新知