gcc
一、问题引入#
在使用VSCode编写C++程序过程中,自定义一个 *.h 文件,其中包含了函数声明,在主函数中引入头文件后,调用头文件对应C++文件中的方法,出现了undefined reference问题
二、解决过程#
分析问题:主要是 预处理时,编译器没有找到stock.cpp的位置,导致 undefined reference问题
直接通过g++命令行:g++ -g .\stock_operate.cpp ..\inc\stock.cpp -o stock_operate
三、反思总结#
涉及到gcc/g++的命令行编译,应该熟悉编译的参数功能,才能合理修改Visual Studio Code中的编译参数。
gcc/g++版本:
gcc介绍#
GNU GCC: https://gcc.gnu.org/
GNU 编译器集合包括前端 C , C++ 、Objective-C、 Fortran 、Ada、Go、D 和 Modula-2 以及这些语言的库(libstdc++,...)。 GCC 最初是作为GNU 操作系统的编译器而编写的。 GNU 系统被开发为 100% 自由软件,自由是指它尊重用户的自由。
编译各阶段全过程:#
b.c
(预处理,gcc -E)-》 b.i
(编译,gcc -S)-》 b.s
(汇编,gcc -c)-》 b.o
(链接,无参数)-》 a.out
注意:a.out是默认输出的可执行二进制文件
编译默认的目录
编译目录#
-
头文件目录
gcc默认搜索头文件的路径:
/usr/include
,如果使用的头文件不在默认搜索路径中,那么需要通过命令手动指定目标路径(-Idir),或者将对应的xxx.h文件复制到默认路径下。 -
库文件目录
gcc默认搜索库的路径:
/lib、/usr/lib、/usr/local/lib
,如果使用的库不在默认搜索路径中,那么需要通过命令手动指定目标路径(-Ldir),或者将对应的libxxx.so文件复制到默认路径下。
编译参数#
以下是一些常用的g++编译器参数及其功能:
-E
: 仅进行预处理操作,不进行编译、汇编和链接,生成后缀为.i
的预编译文件-S
: 仅进行编译操作,不进行汇编和链接,生成后缀为.s
的预编译文件-o
: 指定输出文件名。例如,g++ test.cpp -o myprog
将编译 test.cpp 并将可执行文件命名为 myprog。如果没有指定输出文件名,那么默认会生成a.out
-c
: 仅进行编译和汇编,但不执行链接操作,生成目标文件(.o
文件)。-w
: 不生成任何警告信息。-Wall
: 生成所有警告信息。-O
: 启用优化选项。有多个级别的优化可以选择,例如-O1
表示启用较基本的优化级别,而-O3
则表示使用更高级别的优化。-g
: 生成调试信息。这可以帮助开发人员在代码出现问题时进行调试。-std=c++XX
: 指定C++语言的版本。例如,-std=c++11
指定使用C++11标准。-I
: 添加头文件搜索路径。例如,-I /usr/local/include
表示在/usr/local/include
目录中查找头文件。-L
: 添加库文件搜索路径。例如,-L /usr/local/lib
表示在/usr/local/lib
目录中查找库文件。-l
: 链接外部库文件。例如,-lboost_system
表示链接名为libboost_system.a或者libboost_system.so(取决于系统)的库文件。-D
: 定义预处理器宏
除此之外,g++还提供了很多其他的编译器参数,可以通过输入man g++
查看完整的帮助文档。
2024-06-27 补充
-Wall
:开启了所有警告消息,那么具体包括哪些项目呢?
主要有:
# 未使用表达式的值
unused-value
# 未使用的变量
unused-variable
# 指针类型冲突
incompatible-pointer-types
# 未使用的函数
unused-function
# 未使用的标签
unused-label
# 未使用的参数
unused-parameter
# 格式化类型错误
format
四、参考引用#
作者:caojun97
出处:https://www.cnblogs.com/caojun97/p/17306608.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具