GCC 编译器

2025-12-07 20 0

说明

1.GCC编译器支持Go、Objective-C、Objective-C++、Fortran、Ada、D和BRIG(HSAIL)等程序

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

实际使用中:

  • 使用gcc指令编译C代码
  • 使用g++指令编译C++代码

编译过程

1.预处理-Pre-Processing(.i文件)

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

2.编译-Compiling (.s文件)

# -S 编译选项告诉 g++ 在为 C++ 代码产生了汇编语言后停止编译
# g++ 产生的汇编语言文件的缺省扩展名是 .s
g++ -S test.i -o test.s

3.汇编-Assembling(.o文件)

# -c 选项告诉 g++ 仅把源代码编译为机器语言的目标代码
# 缺省时 g++ 建立的目标代码文件有一个 .o 的扩展名
g++ -c test.s -o test.o
此处可能出现问题,注意-c是小写,不是大写。

/usr/bin/ld: test.o: _ZSt4cout: invalid version 3 (max 0) /usr/bin/ld: test.o: error adding symbols: bad value collect2: error: ld returned 1 exit status

  • -c:编译但不链接,生成目标文件(.o 文件)
  • -C:在某些编译器中可能表示其他含义,但不是标准的编译选项

4.链接-Linking (.bin文件)

# -o 编译选项来为将产生的可执行文件用指定的文件名
g++ test.o -o test

重要参数

  1. -g 编译带调试信息的可执行文件
  2. -O[n] 优化源代码
  3. -l(library) 指定库文件(默认在/lib和/user/lib和/usr/local/lib里查找)
  4. -L(library path) 指定库文件查找路径
  5. -I(include) 指定头文件搜索目录
  6. -Wall 打印警告信息
  7. -w 关闭警告信息
  8. -std=c++11 设置编译器标准
  9. -o 指定输出文件名
  10. -D 定义宏

库文件

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

## 进入src目录下
cd src

## 汇编 生成Swap.o文件
g++ Swap.cpp -c -I../include
# 生成静态库libSwap.a
ar rs libSwap.a Swap.o

## 回到上级目录
cd ..

# 链接生成可执行文件:staticmain
g++ main.cpp -Iinclude -Lsrc -lSwap -o staticmain

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

## 进入src目录下
cd src

# 生成动态库libSwap.so
g++ Swap.cpp -I../include -fPIC -shard -o libSwap.so
## 上面命令等价于以下两条命令
# gcc Swap.cpp -I../include -c -fPIC
# gcc -shared -o libSwap.so Swap.o

## 回到上级目录
cd ..

# 链接,生成可执行文件:sharemain
g++ main.cpp -Iinclude -Lsrc -lSwap -o sharemain

运行可执行文件

# 运行静态可执行文件
./staticmain
# 运行动态可执行文件
LD_LIBRARY_PATH=src ./sharemain

相关文章

使用 CloudFlare Worker 搭建 Docker Hub 镜像加速服务
VSCode 系统禁止运行脚本解决方案
安装Docker并配置加速源
GDB调试器
Linux 开发环境搭建
Linux 系统介绍

发布评论