赞
踩
Vi 编辑器是 Linux 和 Unix 上最基本的文本编辑器,工作在字符模式下,支持众多的命令,是一款功能强大,效率很高的文本编辑器。Vi 编辑器可以对文本进行编辑、删除、查找和替换、文本块操作等,全部操作都是在命令模式下进行的。Vi 有两种工作模式:命令模式和输入模式。
在终端输入如下命令,可安装vim
sudo apt-get install vim
查看vim版本
vim --version
启动vim
vi
在命令模式下输入如下所示的命令都可以退出 Vi 编辑器,回到 Shell 界面
命令 | 说明 |
---|---|
:q | 退出未被编辑过的文件 |
:q! | 强行退出vi,丢弃所有改动 |
:wq | 存盘退出vi |
Vi 编辑器的整个文本编辑都用键盘而非鼠标来完成,传统的光标移动方式是在命令模式下输入 h、j、k、l 完成光标的移动,后来也支持键盘的方向键以及 Page Up 和 Page Down 翻页键
直接用vi创建文件
vi hello.c
GCC(GNU Compiler Collection,GNU 编译器套件),是由 GNU 开发的编程语言编译 器。GNU 编译器套件包括 C、C++、Objective-C、Fortran、Java、Ada 和 Go 语言的前端, 也包括了这些语言的库(如 libstdc++、libgcj 等)。GCC 的官网是 http://gcc.gnu.org,目前最 新版本是 GCC 12.2。 GCC 支持多种计算机体系结构芯片,如 X86、ARM、MIPS 等,并已被移植到其它多 种硬件平台。
gcc是一个编译器套件,包含很多软件包
名称 | 功能 |
---|---|
gcc | C编译器 |
g++ | C++编译器 |
libstdc++ | 标准C++库 |
用于编译和链接 C/C++
程序所需的文件扩展名如下所示
扩展名 | 文件内容 |
---|---|
.c | C语言源码 |
.C ,.cc 或.cxx | C++语言源码 |
.h | C/C++源代码头文件 |
.i | .c 文件经过预处理后得到的C语言源代码 |
.ii | .C ,.cc 或.cxx 文件经过预处理后得到的C++源代码 |
.o | 目标文件,编译过程得到的中间文件 |
.s | 汇编语言文件,是.i 文件编译后得到的中间文件 |
.so | 动态链接库 |
在终端输入如下命令,可安装build-essential
包
sudo apt-get install build-essential
查看gcc版本,我的版本为7.5.0
gcc -v
查看linux内核版本,我的版本为5.4.0-125-generic
uname -r
查看ubuntu版本
cat /etc/issue
返回结果
Ubuntu 18.04.6 LTS \n \l
查看已安装gcc版本
ls /usr/bin/gcc*
gcc -E test.c –o test.i
g++ -E test.cpp –o test.i
gcc -S test.i -o test.s
g++ -S test.i -o test.s
gcc -c test.s -o test.o
g++ -c test.s -o test.o
gcc test.o -o test
g++ test.o -o test
-g
→
\to
→编译带调试信息的可执行文件-O(n)
→
\to
→优化源代码-l
指定库文件,-L
指定库文件路径-I
指定头文件搜索目录-Wall
打印警告信息g++
关闭警告信息-std=c++11
设置编译标准-o
指定文件输出名-D
定义宏最初目录结构
swap
├── include
│ └── swap.h
├── main.cpp
└── src
└── swap.cpp
直接编译,运行
g++ main.cpp src/swap.cpp -Iinclude
./a.out
增加参数编译,并运行
g++ main.cpp src/swap.cpp -Iinclude -std=c++11 -O2 -Wall -o b.out
./b.out
生成库文件并编译
//进入src目录
cd src
//汇编,生成.o文件
g++ swap.cpp -c -I../include
//生成静态库.o文件
ar rs libswap.a swap.o
//回到上级目录
cd ..
//链接
g++ main.cpp -Iinclude -Lsrc -lswap -o staticmain
//运行
./staticmain
swap
├── a.out
├── b.out
├── include
│ └── swap.h
├── main.cpp
├── src
│ ├── libswap.a
│ ├── swap.cpp
│ └── swap.o
└── staticmain
//进入src目录
cd src
//生成动态库libswap.so
g++ swap.cpp -I../include -fPIC -shared -o libswap.so
//回到上级目录
cd ..
//链接
g++ main.cpp -Iinclude -Lsrc -lswap -o sharemain
//运行
LD_LIBRARY_PATH=src ./sharemain
.
├── a.out
├── b.out
├── include
│ └── swap.h
├── main.cpp
├── sharemain
└── src
├── libswap.so
└── swap.cpp
GDB是一个用来调试C/C++程序的功能强大的调试器,是Linux系统开发C/C++最常用的调试器
调试开始:gdb [exefilename],进入gdb调试程序,其中exefilename为要调试的可执行文件名
help //查看命令帮助 run //重新开始运行文件 start //单步执行,运行程序,停在第一步执行程序 list //查看源代码 set //设置变量的值 next //单步调试(逐过程,函数直接执行) step //单步调试,逐语句,跳入自定义函数内部执行 backtrace //查看函数调用的栈帧和层级关系 finish //结束当前函数 continue //继续执行 print //打印值 quit //退出gdb break+num //在num行设置断点 info breakpoints //查看当前设置的所有断点 delete breakpoints num //删除第num个断点 display //追踪查看具体变量值 undisplay
Tips:
1.编译程序时需要加上-g
,之后才能用gdb进行调试:gcc -g main.cpp -o main
2. 回车键:重复上一命令
先生成可执行文件
g++ -g sum.cpp -o a_yes_g
然后开启gdb调试
gdb a_yes_g
断点调试
break 13
查看所有断点
info breakpoints
简写
i b
开始运行
run
打印值
print i
继续执行
continue
追踪查看具体变量值
display i
查看源代码
list
退出gdb
quit
安装
sudo dpkg -i code_1.49.3-1601661857_amd64.deb
插件安装
C/C++
CMake
CMake Tools
快捷键
功能 | 快捷键 |
---|---|
转到文件 | Ctrl + p |
关闭文件 | Ctrl + w |
打开命令面板 | Ctrl + Shift + p |
当前行上移/下移 | Alt + Up/Down |
打开终端 | Ctrl + ` |
变量统一命名 | F2 |
关闭侧边栏 | Ctrl + B |
转到定义处 | F12 |
代码格式化 | Ctrl + Shift +i |
全屏 | F11 |
放大/缩小 | Ctrl + / - |
launch.json
"program": "${workspaceFolder}/build/cmake_exe"
"cwd": "${workspaceFolder}"
"preLaunchTask": "Build",
"miDebuggerPath": "/usr/bin/gdb"
tasks.json
{ "version": "2.0.0", "options": { "cwd": "${workspaceFolder}/build" }, "tasks": [ { "type": "shell", "label": "cmake", "command": "cmake", "args": [ ".." ] }, { "label": "make", "group": { "kind": "build", "isDefault": true }, "command": "make", "args": [ ] }, { "label": "Build", "dependsOrder": "sequence", // 按列出的顺序执行任务依赖项 "dependsOn":[ "cmake", "make" ] } ] }
安装
sudo apt-get install git
设置签名
git config --global user.name sjn
git config --global user.email 邮箱地址
SSH
ssh-keygen -t rsa -C 邮箱地址
进入.ssh目录,复制id_rsa.pub文件内容
登录GitHub。Settings --> SSH and GPG keys --> New SSH Key
回到git通过ssh地址创建。git remote add 别名 SSH地址
CMake是一个跨平台的安装编译工具,可以用简单的语句描述所有平台的编译过程
基本语法格式:指令(参数1 参数2)
指令是大小写无关的,参数和变量是大小写相关的
变量使用${}方式取值,但是在IF语句中是直接使用变量名
cmake_minimum_required
- 指定CMake的最小版本要求语法:cmake_minimum_required(VERSION versionNumber [FATAL_ERROR])
# CMake最小版本要求2.8.3
cmake_minimum_required(VERSION 2.8.3)
project
- 定义工程名称,并可指定工程支持的语言语法:project(projectname [CXX] [C] [Java])L
# 指定工程名为HELLOWORLD
project(HELLOWORLD)
set
- 显式的定义变量# 定义SRC变量,其值为main.cpp hello.cpp
set(SRC sayhello.cpp hello.cpp)
include_directories
-向工程添加多个特定的头文件搜索路径 —> 相当于指定g++编译器的-I参数# 将/usr/include/myincludefolder 和 ./include 添加到头文件搜索路径
include_directories(/usr/include/myincludefolder ./include)
link_directories
-向工程添加多个特定的库文件搜索路径 —> 相当于指定g++编译器的-L参数# 将/usr/lib/mylibfolder 和 ./lib 添加到库文件搜索路径
link_directories(/usr/lib/mylibfolder ./lib)
add_library
-生成库文件# 通过变量 SRC 生成 libhello.so共享库
add_library(hello SHARED $(SRC))
add_compile_options
- 添加编译参数# 添加编译参数
add_compile_options(-wall -std=c++11 -o2)
add_executable
- 生成可执行文件# 编译main.cpp生成可执行文件
add_executable(main main.cpp)
target_link_libraries
- 为target添加需要链接的共享库 —> 相当于指定g++编译器-l参数# 将hello动态库链接到可执行文件main
target_link_libraries(main hello)
add_subdirectory
- 向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置# 添加src子目录,src中需有一个CMakeLists.txt
add_subdirectory(src)
aux_source_directory
- 发现一个目录下所有的源文件代码并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表# 定义SRC变量,其值为当前目录下所有的源代码文件
aux_source_directory(. SRC)
# 编译SRC变量所代表的源代码文件,生成main可执行文件
add_executable(main ${SRC})
CMAKE_C_FLAGS
gcc编译选项CMAKE_CXX_FLAGS
g++编译选项# 在CMAKE_CXX_FLAGS编译选项后追加-std=c++11
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11")
CMAKE_BUILD_TYPE
编译类型(Debug, Release)# 设定编译类型为debug, 调试时需要选择debug
set(CMAKE_BUILD_TYPE Debug)
# 设定编译类型为release, 发布时需要选择release
set(CMAKE_BUILD_TYPE Release)
CMAKE_C_COMPILER
: 指定C编译器CMAKE_CXX_COMPILER
:指定C++编译器EXECUTABLE_OUTPUT_PATH
:可执行文件输出的存放路径LIBRARY_OUTPUT_PATH
:库文件输出的存放路径CMake目录结构:项目主目录存放一个CMakeLists.txt文件
两种方式设置编译规则:
编译流程: 在linux平台下使用CMake构建C/C++工程的流程如下
cmake PATH
生成Makefile(PATH 是顶层CMakeLists.txt所在目录)#important tips
. #表示当前目录
. / #表示当前目录
. . #表示当前目录
. ./ #表示当前目录
两种构建方式:
## 外部构建
# 1. 在当前目录下,创建build文件夹
mkdir build
# 2. 进入build文件夹
cd build
# 3. 编译上级目录的CMakeLists.txt,生成Makefile和其他文件
cmake ..
# 4. 执行make命令,生成target
make
参考:https://docs.opencv.org/3.4.10/d7/d9f/tutorial_linux_install.html
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
查看CMake版本
cmake --version
默认安装版本是3.10.2
将.zip
文件下载后放在/home/jn
中,并输入指令解压文件
unzip opencv-4.5.4
在opencv-4.5.4
文件夹下创建build
文件夹
mkdir build
进入build
文件夹
cd build
在build
目录下执行 cmake
和 make
cmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=O -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
在终端输入
nproc
可查看线程数,线程为4,因此数字为4
make -j4
sudo make install
sudo gedit /etc/ld.so.conf.d/opencv.conf
/usr/local/lib
sudo ldconfig
sudo gedit /etc/bash.bashrc
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
source /etc/bash.bashrc
sudo updatedb
pkg-config --modversion opencv4 #查看版本号
pkg-config --libs opencv4 #查看libs库
创建test
文件夹,创建test.cpp
,创建CMakeLists.txt
#include <opencv2/imgcodecs.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> #include <iostream> using namespace cv; using namespace std; int main() { VideoCapture cap(0); Mat img; while (true) { cap.read(img); imshow("Image", img); waitKey(1); } return 0; }
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(test)
find_package(OpenCV REQUIRED)
add_executable(test01 test.cpp)
target_link_libraries(test01 ${OpenCV_LIBS})
cmake .
make
遇到问题
Failed to load module "canberra-gtk-module"
sudo apt-get install libcanberra-gtk-module
参考文献:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。