• gcc/g++命令参数


    在windows环境下,我们运行一程序,只需要在VS中点击运行按键即可,VS帮我们做完了程序的预处理、编译、汇编、链接阶段
    但是在linux环境下,我们只能借助gcc/g++完成这一系列的操作
    -o参数:g++ main.cpp -o main
      -o:output(输出)的意思,指将main.cpp输出为main。如果不指名具体的执行文件名(g++ main.cpp),将会在同级目录下生产a.out文件
    -E参数:g++ -E main.cpp -o main.i
      -E:prEprocessing(预处理)的意思,该过程完成:宏替换、去注释、头文件展开、添加行号等动作
    -S参数:g++ -S main.i -o main.s
      -S:aSsemble(汇编)的意思。该过程将源码变为汇编代码
    -c参数:g++ -c main.s -o main.o
      -c:compile(编译)的意思。该过程将一系列的汇编代码,变成机器代码
    编译的过程代码只需要找到有匹配的声明即可,不管接口有没有定义,所以出现未定义符号的阶段都是在链接阶段。
    C++一般不会存在重复声明的问题,因为编译阶段,会将函数名以及变量类型组合成一个符号。
    C语言会存在重复声明的问题,因为C语言在编译阶段只会将函数名组成一个符号,所以即使参数不同也无济于事。
    当然我们可以在整个编译链接阶段加入额外的参数进行控制,如:
     -g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
     -O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
     -O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
     -Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶

  • 相关阅读:
    SQL注入详解
    Nginx跨域及Https配置
    GET请求和POST请求的request和response的中文乱码问题
    创建Maven工程
    Maven环境变量配置
    Cookie&Session会话技术
    Maven库站
    20191002思维导图工具MindManager 000 033
    20190930-02 Redis持久化方式一:RDB及修改RDB的默认持久化策略 000 032
    Tomcat配置HTTPS方式生成安全证书
  • 原文地址:https://www.cnblogs.com/wangdongfang/p/13358349.html
Copyright © 2020-2023  润新知