• gcc命令小结


    预处理,编译,汇编,连接的参数如下
    源文件(ma.c,ma.cc)------->-E,经过预处理(ma.i)------------>-S 经过编译(.s)--------->-c 经过汇编(.o)--------->链接成目标文件

    1.预处理部分,把.c文件预处理成
    gcc -E m.c
    -E参数只对源文件进行预处理,不执行编译的步骤,输出被送到标准输出,如果源文件不需要预处理(例如不是.c源文件等),那么会忽略,
    我们可以指定预处理生成的文件 gcc(g++) -E ma.c(ma.cc) -o ma.i,可以看到ma.i这个预处理文件,很大,很大……
    2.编译,把源文件编译成.s的汇编文件
    gcc -S ma.c或者ma.i -o ma.s
    -S可以把.c或者.i文件编译成.s汇编文件
    3.汇编,把源文件汇编成目标文件.o
    gcc -c ma.c或者ma.s -o ma.o
    -c这个选项是可以作编译或者汇编的,如果我们不写-o ma.o,默认也是生成ma.o的,即汇编把.c或者.s文件生成.o文件
    4.链接
    gcc 自己的各种.o文件 -o 生成文件
    gcc会把要使用到的静态连接库和动态连接库和我们自己的.o文件一起链接生成可执行文件


    关于这4个阶段,都有很多的参数进行优化

    1.gcc -Wall,这个参数打开所有warning提醒,产生尽可能多的警告
    2.gcc -std=指定语言标准,当前仅编译c/c++文件时才有用,好多标准,如c90,c89,gnu89(编译c默认标准 ),gnu90,iso9899:1990,c99,c9x,c1x,c++98,c++0x,gnu++98(编译c++时默认)
    3.gcc -Werror,gcc会在所有产生warning的地方停止编译
    4. gcc -pedantic ,-pedantic选项能够帮助程序员发现一些不符合 ANSI/ISO C标准的代码,但不是全部,事实上只有ANSI/ISO C语言标准中要求进行编译器诊断的那些情况,才有可能被GCC发现并提出警告
    5.gcc -I DIR,把DIR增加到搜索头文件的目录中,默认头文件是放在/usr/include目录的,gcc会现搜索指定的DIR,然后在搜索标准include目录。
    6.gcc -L 目录,要用到第三方的库的话,例如mysql,那么编译时会用到-lmysqlclient,那么mysqlclient.so这个库文件如果没有放到/usr/lib里面去,我们就要手动指定他的目录,这时-L 目录就是mysqlclient.so文件所在地方,完成的应该是
    gcc -L /x/y/z -lmysqlclient ....

  • 相关阅读:
    c# 子窗体打开或者切换就最大化
    TreeView失去焦点时亮显选中状态
    解决 RecursionError: maximum recursion depth exceeded
    CentOS7安装jdk1.8
    CentOS7安装mysql5.7
    CentOS7安装redis3.2.3
    CentOS7安装nginx1.8
    centos7设置redis开机自启动
    Linux下执行sh脚本报错:$' ': command not found
    Linux下使用unhide查看隐藏文件
  • 原文地址:https://www.cnblogs.com/buxianghe/p/3060874.html
Copyright © 2020-2023  润新知