Linux编译C++
时间:2022-07-22
本文章向大家介绍Linux编译C++,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
创建C++编译环境
- 安装VIM PLUS
为什么安装VIM PLUS: 可以为我们提供良好的编译环境,高亮代码,智能提示等等~
git clone https://github.com/chxuan/vimplus.git ~/.vimplus
cd ~/.vimplus
-
./install.sh
运行脚本install.sh来安装vimplus(如果你是非root用户请参考这篇文章解决不在 sudoers 文件中。此事将被报告的异常)
1)此时脚本开始运行 2)选择python3解释编译ycm文件 此时脚本文件会问你是选择python2还是python3来编译ycm文件?我在这里选择3,在此之前请安装python3 3)开始安装插件 4)此时vimplus就安装成功了
- 安装Debug
- GDB和LLDB的关系 调试器描述 GDBUNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能。 LLDBLLDB(Low Level Debug)是Apple正在迁移的LLVM工具套件(包括Clang)的一部分具有REPL (Read-Eval-Print Loop,交互式解释器)、C++ 和 Python 插件,位于 Xcode 窗口底部控制台中,也有其他 IDE 加入了 LLDB 调试器,如** CLion**,当然其也可以在 terminal 中使用。
- 安装GDB调试器
yum install gdb
(CentOS)gdb -v
查看gdb是否安装成功 - 安装LLDB调试器(暂时不写) 大多数电脑还是用GDB作为调试器的,一般只有MAC使用且内置LLDB,暂时先不写这个
- 安装g++编译器
yum install gcc-g++
gcc -v
查看是否安装成功
通过g++编译程序
- 创建程序main.cpp,func.cpp,func.h main.cpp #include "func.h" int main() { int a,b; scanf("%d %d",&a,&b); change(&a,&b); printf("%d %d",a,b); return 0; } func.cpp #include "func.h" void change(int *a,int *b){ int temp; temp = *a; *a = *b; *b = temp; } func.h #pragma once #include <cstdio> void change(int *a,int *b); VimPlus如图所示:
-
g++ -g main.cpp func.cpp -o out
我们详细描述一下这条指令的执行过程- g++ main.cpp 相当于g++ -c main.cpp 目的是生成机器码文件即main.o和func.o(这里有个误区,小白往往把**.o**文件当初可执行文件,这是绝对错误的!!!)
-
g++ -g main.cpp func.cpp
-o out 后面的部分是生成可执行文件out名字可以任意取 -
./out
执行程序
- 设置断点
设置断点之前我们进入gdb调试
gdb out
开始Debugb main
在main函数设置断点(此时程序会停在初始化的第一条语句)run
执行程序 - 查看栈
frame
可以查看程序在哪一个函数 此时执行frame
可以看到程序进入了change()中
我们继续执行代码,此时跳出函数后执行frame
后,返回main函数中
我尝试画了一张图应该是这样
当它change()函数被执行完毕后,有返回到main函数执行
- 《快学Scala》第二章 控制结构和函数
- A+B for Input-Output Practice (VI)
- 前后端分离跨服务器文件上传-Java SpringMVC版
- 数组和链表的区别
- 《快学Scala》第一章 基础
- 二分查找法的实现和应用汇总
- 《快学Scala》第一章 基础
- 移动端打印输出内容以及网络请求-vconsole.js
- 二分查找法的实现和应用汇总
- JavaScript前端和Java后端的AES加密和解密
- 《Spark MLlib 机器学习实战》1——读后总结
- angularjs自定义指令实现分页插件
- A+B for Input-Output Practice (V)
- 机器学习——相似度算法汇总
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 同事埋了个坑:Insert into select语句把生产服务器炸了
- VBA使用API_01:读取文件
- 从0到1,撸一个IDEA插件,So Easy!
- VBA调用外部对象02:FileSystemObject
- VCS与Verdi的联合仿真
- ADC数据接入到AXI-Steam Interface
- Java面试必问:ThreadLocal终极篇 淦!
- BERT文本摘要
- 【NPM库】- 0x01
- 基于分类任务的信号(EEG)处理--代码分步解析
- 文件操作——举例
- flink之udf执行流程分析篇
- VBA调用外部对象02:FileSystemObject——操作文本文件
- 打卡群刷题总结0723——组合
- VBA根据单元格底色统计个数