特殊的“Undefined Reference xxx“编译错误

make编译c++程序时,一个头文件对应的一个库,编译过程中出现这个库中有未定义的函数,但是该库中所有函数均已经实现。此时可以检查一下头文件和库使用的语言是不是相同;当头文件是c语言实现,而库为c++实现时也会出现未定义的错误;

另外如果库是c++实现,但头文件中有如下语句:

cpp 复制代码
#ifdef __cplusplus 
extern "C" { 
#endif 
 
//一段代码 
 
#ifdef __cplusplus 
} 
#endif 
 

此时需要关闭这些语句。

extern "C" 的作用:通知编译器,按照 C 的链接方式生成符号,而不是 C++ 的方式。

  • **extern "C"**让 C++ 编译器生成与 C 一致的符号,从而实现跨语言链接。
  • 必要性:在头文件中保护 C 的声明,同时允许 C++ 调用。
  • 代码块意义 :
    • 包含 extern "C" 的代码块用 C 的方式处理。
    • 条件编译确保这段代码只在 C++ 编译器中生效。
相关推荐
jimy12 小时前
c++的 Type Traits (一)
开发语言·c++
别动我齐刘海2 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
青岚_Nox2 小时前
C语言实战:带你手写一个带"计时功能"的猜数字小游戏
c语言
ZZHow10243 小时前
Ascend C算子开发(高级)笔记
c++·人工智能·笔记·深度学习·华为云
aqiu1111114 小时前
【C++算法打怪专栏】LeetCode 217. 存在重复元素(解法总结)
c++·算法·leetcode
lojox4 小时前
深入理解 C++ STL:vector 底层实现、迭代器失效与 list 特性
开发语言·c++
iotxiaohu4 小时前
用 cflow 查看 C 函数调用关系
c语言·开发语言·cflow
微笑星河q5 小时前
C++类和对象(下)初始化列表、类型转换、static、友元、内部类、匿名对象
开发语言·c++
|_⊙5 小时前
C++ 类和对象零散知识点
开发语言·c++
xiangyun616 小时前
C++ list 模拟实现(二):const迭代器与反向迭代器,模板的黑魔法
开发语言·数据库·c++·算法·stl·list