Loading

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


四、参考引用#

VSCode编写C++自定义头文件undefined reference异常问题

作者:caojun97

出处:https://www.cnblogs.com/caojun97/p/17306608.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   eiSouthBoy  阅读(376)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu