• gcc学习笔记(转)


    gcc使用方法
    1:预编译
    gcc -E hello.c -o hello.i
    2:将hello.i编译成目标代码
    gcc -c hello.i -o hello.o
    3:生成可执行文件
    gcc hello.o -o hello
    4查看结果
    ./hello


    gcc foo1.c foo2.c -o foo
    等同于
    gcc -c foo1.c -o foo1.o
    gcc -c foo2.c -o foo2.o
    gcc foo1.o foo2.o -o foo

    警告提示方法
    1 -pedantic(在扩展语法的地方产生相应的警告信息)
    gcc -pedantic illcode.c -o illcode
    2:-Wall (使gcc产生尽可能多的错误信息)
    gcc -Wall illcode.c -o illcode
    3:-Werror(要求gcc对所有的警告当成错误进行处理)
    4:gcc -Wall -Werror illcode.c -o illcode


    库依赖
    linux下的大多数函数都默认将头文件放到/usr/include/目录下,而库文件放到/usr/lib/目录下
    gcc 的-I选项可以向gcc的头文件搜索路径中添加新的目录。
    gcc foo.c -I /home/xiaowp/include -o foo

    gcc foo.c -L /home/xiaowp/lib -lfoo -o foo
    gcc foo.c -L /home/xiaowp/lib -static -lfoo -o foo

    代码优化
    -On
    n是一个代表优化级别的整数
    -O可以告诉GCC同时减小代码的长度和执行时间,其效果等价于-O1
    选项-O2告诉GCC除了完成所有-O1级别的优化之外,同时还要进行一些额外的调整工作,如处理器指令调度等。
    选项-O3告诉GCC除了完成所有-O2级别的优化之外,还包括循环展开和其它一些与处理器特性相关的优化工作。
    通常来说,数字越大优化的级别越高,同时也意为着程序的运行速度越快。许多linux程序员用-O2选项


    调试
    -g 或者 -ggdb
    -g1:不包含局部变量和与行号有关的调试信息,因此只能用于回溯跟踪和堆栈转储之用。回溯跟踪指的是监视程序在运行过程中的函数调用历史,堆栈转储则是一种以原始的十六进制格式保存程序执行环境的方法,两者都是经常用到的调试手段
    -g2:此时产生的调试信息包括扩展的符号表,行号,局部或外部变量信息。
    -g3:包括级别2中的所用调试信息,以及源代码中定义的宏
    -ggdb 和-g的调试级别完全一样

    gdb调试步骤:
    1:gcc -g crash.c -o -crash
    ./crash
    ***
    gdb crash(可执行文件)
    run
    backtrace(回溯跟踪命令)
    quit (退出)
    调试时可能会用到编译器产生的中间结果,这是可以使用-save-temps选项,让gcc将预处理代码,汇编代码,和目标代码都作为文件保存起来。
    gcc -save-temps crash.c -o crash
    ls crash(显示crash.c的相关文件:预处理代码,汇编代码,和目标代码)
  • 相关阅读:
    Metro-Ural119递推
    Flags-Ural1225简单递推
    Candies-POJ3159差分约束
    Is the Information Reliable? -POJ2983差分约束
    MPI Maelstrom
    Codeforces Round #342 (Div. 2)-B. War of the Corporations
    Codeforces Round #342 (Div. 2)-A. Guest From the Past
    Vim升华之树形目录插件NERDTree安装图解
    The Same Game-POJ1027模拟
    Flesch Reading Ease -POJ3371模拟
  • 原文地址:https://www.cnblogs.com/wen12128/p/1873666.html
Copyright © 2020-2023  润新知