Linux C/C++ 编译过程

Genius

设备:vmware Ubuntu 18.04

源自b站:3.3 【实战】g++命令行编译_哔哩哔哩_bilibili

一、开发环境搭建

1.编译器,调试器的安装

1.1安装GCC,GDB

sudo apt update #更新
sudo apt install build-essential gdb #安装编译器和调试器

1.2 安装成功验证(返回版本号即安装成功)

#查看编译器,调试器版本号
gcc --version
g++ --version
gdb --version

1.3安装CMake,安装验证(返回版本号即安装成功)

sudo apt install cmake
cmake --version

二、GCC编译器

前言:Linux 开发C/C++ 必须熟悉GCC

           VSCode 是通过GCC编译器来实现C/C++的编译工作的

1.编译过程

1预处理-Pre-Processing    //.i文件

//  -E 选项指示编译器对输入文件进行预处理
g++ -E test.cpp -o test.i 

2编译-Compiling  //.s文件

//  -S 编译选项告诉 g++ 为 C++ 产生汇编语言文件
g++ -S test.i -o test.s

3.汇编-Assembling  /.o文件

//  -c 选项告诉 g++ 仅把源代码编译为机器语言的目标代码
g++ -c test.o -o test.o

4.链接-Linking  //bin文件

// -o 选项为可执行文件指定文件名
g++ test.o -o test

2.g++重要编译参数

1. -g 编译带调试信息的可执行文件

// -g 选项告诉 GCC 产生能被 GNU 调试器GDB使用的调试信息
//产生可执行文件test
g++ -g test.cpp -o test

2. -O[n] 优化源代码

// -O0 表示不优化
// -O1 默认优化
// -O2 处理完成-O1的优化外,还进行了额外的调整,如指令调整
// -O3 包括循环展开和其他一些与处理特性相关的优化
g++ -O2 test.cpp

3. -l (L的小写)指定库文件

    -L 指定库文件路径

//-l跟库名,中间无空格
//在/lib和/usr/lib和/usr/local/lib里的库直接用-l就能链接
//链接logo库
g++ -llogo test.cpp

//如果文件没有放在以上三个目录下,则需要-L(中间无空格)跟库文件路径
//链接mylogo库,libmylogo路径为/home/zzzz/mylogolibfolder
g++ -L/home/zzzz/mylogolibfolder -lmylogo test.cpp

4. -I(i的大写)

// /usr/include 目录一般不用指定,但是如果头文件不再此目录中,就需要 -I 指定头文件目录
// eg:头文件在myinclude目录里则需要
g++ -I/myinclude test.cpp

5. -Wall 打印警告信息

g++ -Wall test.cpp

6. -w 关闭警告信息

g++ -w test.cpp

7. -std=c++11  设置编译标准

//使用c++11 标准编译 test.cpp
g++ -std=c++11 test.cpp

 8. -o 指定输出文件名

//当生成可执行文件时不加 -o 选项,则默认生成a.out
g++  test.cpp -o test

9. -D 定义宏

//常用场景 :-DDEBUG定义DEBUG宏,可能文件中有DEBUG宏部分相关信息,用这个DDEBUG来选择开启或关闭DEBUG


//eg:
#include<stdio.h>
int main(){
    #ifdef DEBUG
        printf("DEBUG LOG\n");
    #endif
        printf("in\n");
}
//1.在编译时,使用g++ -DDEBUG main.cpp
//2.第七行代码可以被执行

 注:使用man gcc 查看 查看gcc的英文使用手册

3. 实战 g++命令编译

 1.准备案例

在你的用户下创建GCC_DEMO_swap文件夹,如图

在文件夹中分别常见include文件夹,main.cpp,src文件夹,如图

在include目录下创建swap.h

 

在src目录下创建swap.cpp来实现swap函数

 

最后在写main.cpp

 

 在GCC_DEMO_swap目录下输入tree .查看文件

2.开始实战 g++命令编译

2.1 直接编译,并运行

//将main.cpp src/swap.cpp 编译成可执行文件
//-Iinclude 表示链接swap.h
g++ main.cpp src/swap.cpp -Iinclude

//运行
./a.out  

2..2增加参数,并运行

//-std=c++11 表示用c++11的标准进行编译
//-O2 表示优化
//-Wall 表示开启警告信息
//-o 指定可执行文件名

g++ main.cpp src/swap.cpp -Iinclude -std=c++11 -O2 -Wall -o b.out

//运行
./b.out

2.3生成库文件并编译

链接静态库生成可执行文件

//进入src目录
//汇编,生成swap.o文件
g++ swap.cpp -c -I../include
//生成静态库libswap.a
ar rs libswap.a swap.o

//回到上级目录
//链接,生成可执行文件:static_main
g++ main.cpp -Iinclude -Lsrc -lswap -o static_main 

执行完毕如图查看文件,并执行:

链接动态库生成可执行文件

//进入src目录
//生成动态库libswap.so
g++ swap.cpp -I../include -fPIC -shared -o libswap.so
//上面等于两条指令
//g++ swap.cpp -I../include -c -fPIC
//g++ -shared -o libswap.so swap.o


//回到上级目录
//链接,生成可执行文件:sharemain
g++ main.cpp -Iinclude -Lsrc -lswap -o sharemain 

在运行时报错:

原因:动态库生成的可执行文件,在运行时加载,但是动态库所在的路径不在默认加载路径下,而是在src目录下

修改运行指令:LD_LIBRARY_PATH=src ./sharemain

查看当前目录结构:

Finish

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在Windows操作系统上配置C/C++编译环境的步骤: 1. 下载MinGW-w64安装包,官网链接:http://mingw-w64.org/doku.php/download 2. 运行安装包,选择“Architecture”为“x86_64”,“Threads”为“posix”,“Exception”为“seh”,“Build revision”为最新版本,点击“Next”。 3. 选择安装路径,点击“Next”。 4. 选择需要安装的组件,至少需要选择“mingw64-gcc-g++”,点击“Next”。 5. 点击“Install”开始安装。 6. 安装完成后,将MinGW-w64的bin目录添加到系统环境变量中。例如,如果MinGW-w64安装在C盘根目录下的mingw-w64-x86_64文件夹中,则需要将C:\mingw-w64-x86_64\mingw64\bin添加到系统环境变量中。 7. 在命令行中输入“g++ -v”命令,如果输出了g++的版本信息,则说明安装成功。 以下是在Linux操作系统上配置C/C++编译环境的步骤: 1. 打开终端,输入以下命令安装gcc和g++编译器: ``` sudo apt-get update sudo apt-get install build-essential ``` 2. 输入以下命令安装CMake: ``` sudo apt-get install cmake ``` 3. 输入以下命令安装调试工具: ``` sudo apt-get install gdb ``` 4. 输入以下命令安装代码编辑器: ``` sudo apt-get install code ``` 5. 在代码编辑器中编写C/C++代码,并保存为.cpp文件。 6. 在终端中进入.cpp文件所在的目录,输入以下命令编译代码: ``` g++ -o output_file input_file.cpp ``` 其中,output_file为输出文件名,input_file.cpp为输入文件名。 7. 输入以下命令运行程序: ``` ./output_file ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值