• c++基础gcc和gdb朝花夕拾


    二进制文件.o

    以点o文件为结尾的文件为二进制文件  目标文件

    gcc –o hello_world hello_world.c  会将目标文件会被删除,直接生成可执行文件

    那么什么时候需要目标文件呢?制作库文件的时候

    通过链接器将目标文件链接可以生成可执行文件,

    gcc

    gcc是 gnu cc的简称,gcc能编译c,c++,object C等语言

    gcc 【option】【filenames】

    -c 只是编译,生成目标文件

    -S 只是编译不汇编,生成汇编代码

    -E 只进行预编译,不做其他处理

    -g 再可执行程序中包含标准调试信息

    -o file 指定输出文件

    -v 版本

    -std=name 指定c语言的标准  c90 c89 c00等

    -l dir 在头文件的搜索路径列表中添加dir目录

    example:

    为了工程化,一个工程下一般具有src bin obj include :源文件 可执行文件  目标文件 头文件

    gcc –o bin/helloworld src/helloworld.c 

    gcc –o obj/helloword.o –c src/helloworld.c

    gcc –o bin/helloworld obj/helloworld.o

    gcc -std=c99 –o bin/helloworld src/helloworld.c //指定c语言标准

    优化选项:

    -O 减少代码的长度和执行时间,效果等价于-O1,其中包括线程的跳转和延迟退栈

    -O2:除完成所有-O1级别的优化之外,还要进行一些额外的调整工作,比如处理器指令的调度。

    -O3: 除完成所有以上工作外,还包括循环展开和其他一些与处理器特性相关的优化工作

    数字越大优化等级越高,一般用第二个,它在优化长度、编译时间和代码大小之间取得了一个比较理想的平衡点。

    linux查看运行时间 time 【filename】

    gcc –O –o bin/optimize src/optimize.c

    警告和出错选项:

    -ansi:支持符合ANSI 标准的c程序

    -pendantic 允许发出ansi c标准所列的全部警告信息

    -pendantic-error:允许发出 ANSI C 标准所列的全部错误信息

    -w 关闭所以警告

    -Wall:允许发出gcc所提供的所有有用的警报信息(跨平台可能出现的问题)

    制作库文件选项:

    -L dir:在库文件的搜索路径列表中添加dir目录

    -static:链接静态库

    -lname:链接名为name 的库文件

    -shared:表明是共享库

    gdb

    gdb调试器:基于Unix和Linux的程序调试工具,没有图形化的友好界面,与微软VC等工具所媲美

    gdb的作用:

    1. 可以按照用户的要求随意运行程序
    2. 可以让被调试的程序在用户所设定的断点处停住
    3. 可以检查此时用户程序中所发生的事,当程序被停住时
    4. 可动态改变用户程序的执行环境

    gdb的使用;

    gcc –g 【其他选项】 【文件名】

    gdb调试的是可执行程序而不是源代码,对源文件进行编译一定要加上选项-g才包含调试信息

    gdb 可执行文件

    l(list)":查看所载入的文件

    b(break):设置断点,程序运行到断点停止,后面可以跟上行号或者函数的名字

    info b:查看设置的断点的情况

    r(run):从第一行开始运行代码,或从指定行开始,可在r后面加上行号

    p n:查看变量n的值

    n(next):单步运行下一行代码(遇到函数不会进入函数)
    s(strp):单步运行下一行代码(遇到函数会进入函数)

    c(continue):恢复程序的运行,执行剩余的程序

    随便用
  • 相关阅读:
    Qt新建线程的方法(有QRunnable,QThreadPool,moveToThread和QtConcurrent的例子)
    QThread 与 QObject的关系(QObject可以用于多线程,可以发送信号调用存在于其他线程的slot函数,但GUI类不可重入)
    Qt线程QThread简析(8个线程等级,在UI线程里可调用thread->wait()等待线程结束,exit()可直接退出线程,setStackSize设置线程堆栈,首次见到Qt::HANDLE,QThreadData和QThreadPrivate)
    QSettings保存程序设置
    QList 和std::list的比较
    转义字符()对JavaScript中JSON.parse的影响
    自定义类似QMutexLocker的CMutexLocker
    部件之间图标拖拽(使用很直观,效果很漂亮)
    QtSoap调用Web Service(QtSoap是非官方应用)
    QTableWidget 导出到csv表格
  • 原文地址:https://www.cnblogs.com/pqhuang/p/12850938.html
Copyright © 2020-2023  润新知