当前位置: 首页 > news >正文

gcc和g++的区别以及明明函数有定义为何链接找不到

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


        g++和gcc似乎没什么区别,比如“gcc -v”和“g++ -v”的输出是完全一样的,用来编译好像也没什么区别,都能编译.c和.cpp,但是分别编译.c和.cpp却又不能链接,怎么回事呢?

目录

g++会把.c当成C++代码

gcc无法链接C++的.o

明明函数有定义为何链接找不到


g++会把.c当成C++代码

        这意味着对.c编译出来的.o并不是C的,而是C++的(符号名称做了扩展)。

        对于.cpp,两个命令并无区别,都是当作C++。

        如果代码只是自己用,全部用g++就可以了,如果考虑共享,最好C还是C,C格式C和C++都能用,C++格式只能C++用。

gcc无法链接C++的.o

        所以只能用g++来链接(除非所有模块都是C的)。

明明函数有定义为何链接找不到

        一般就是因为搞错了代码实际是当作C还是C++来编译的,以C++方式编译的符号名会带上类型和参数信息。以C++方式编译的C文件和由C++包含的C的头文件会发生这种诡异的问题。

        为了解决这个问题,C的头文件一般(但不是全部)会提前考虑:

#ifdef __cplusplus
extern "C"
{
#endif

//。。。。。。 将被编译为C格式的声明

#ifdef __cplusplus
}
#endif

        这样当头文件被C++代码使用的时候,会按照C规则处理相关符号。 

        如果C的头文件没有这样做,C++那边也可以很简单地处理,将include放在extern"C"里面即可:

extern "C"
{
#include "C的未处理__cplusplus的头文件"
}

        __cplusplus是一个标准的预定义的宏,用来表示正在按照C++而不是C来编译。


(这里是文档结束)

http://www.dtcms.com/a/24556.html

相关文章:

  • 7-1 打印沙漏
  • 【动态规划】落花人独立,微雨燕双飞 - 8. 01背包问题
  • Python在网络安全中的应用 python与网络安全
  • python环境的yolov11.rknn物体检测
  • 前端VUE+后端uwsgi 环境搭建
  • 算法-栈-删除字符串中的所有相邻重复项
  • 部署k8s 集群1.26.0(containerd方式)
  • SQL优化可以从哪些方面入手
  • 网络基础(持续更新中)
  • 什么是HTTP和HTTPS?它们之间有什么区别?
  • Leetcode 72. 编辑距离
  • UE5 Niagara 粒子远处闪烁解决
  • 告别冷冰冰:如何训练AI写出温暖人心的广告文案
  • 函数重载讲解
  • ios苹果手机使用AScript应用程序实现UI自动化操作,非常简单的一种方式
  • 25化学化工研究生复试面试问题汇总 化学化工专业知识问题很全! 化学化工复试全流程攻略 化学化工考研复试真题汇总
  • 深入理解Python字典(Dictionary):从基础操作到高级应用
  • B. 中位数
  • 安装海康威视相机SDK后,catkin_make其他项目时,出现“libusb_set_option”错误的解决方法
  • 排序与算法:希尔排序
  • 航空公司客户价值分析
  • 网页制作01-html,css,javascript初认识のhtml的基本标记
  • 【Linux】Linux 文件系统——关于inode 不足的相关案例
  • Html、Markdown的信息提取
  • 解锁享元模式:内存优化与性能提升的关键密码
  • Python 安装避坑指南
  • DeepSeek 和 ChatGPT 在特定任务中的表现:逻辑推理与创意生成
  • 计算机组成原理——输入/输出系统(十五)
  • Makefile 阅读笔记
  • 淘宝拍立淘按图搜索商品API接口概述及JSON数据示例返回