C++链接

未分类
641 词

核心内容

视频的核心内容是解释 C++ 程序从源代码到可执行文件的过程中,“链接”这一步骤的作用以及常见的链接错误和解决方法。

  • 什么是链接? [00:04] 链接是在编译之后的一个步骤,它的主要任务是找到程序中所有被称为“符号”的东西(比如函数或变量)的位置,并将它们连接起来,最终生成一个可执行文件 [00:21]。即使是只有一个文件的简单程序,也需要链接器来找到程序的入口点(main 函数),这样程序才能开始运行 [00:52]。
  • 编译和链接的区别 [01:37]
    • 编译是将源代码转换成机器码,主要关注语法是否正确。编译错误通常以 “C” 开头 [02:31]。
    • 链接是将编译后生成的各个部分组合起来。链接错误通常以 “LNK” 开头 [02:50]。

常见的链接错误及解决方法

  1. 未解析的外部符号 (Unresolved External Symbol) [05:47]
    • 原因:当代码中调用了一个函数,但链接器找不到这个函数的具体实现时,就会报这个错。这可能是因为函数名写错了,或者忘记将实现该函数的 .cpp 文件加入到项目中 [05:53]。
    • 注意:函数的签名(返回类型、函数名和参数)必须完全匹配,否则链接器也会认为它们是不同的函数 [08:26]。
  2. 符号重复定义 (Duplicate Symbol) [09:45]
    • 原因:当同一个函数或变量有多个定义时,链接器就不知道该使用哪一个。一个常见的原因是在头文件(.h 文件)中直接定义了函数,然后这个头文件又被多个 .cpp 文件包含,导致每个 .cpp 文件都生成了一个函数定义 [12:18]。
    • 解决方法
      • 使用 static 关键字,将函数的作用域限制在当前文件内 [13:04]。
      • 使用 inline 关键字,让函数在被调用的地方展开,避免生成重复的符号 [13:30]。
      • 最佳实践:遵循“声明在头文件,定义在源文件”的原则。也就是说,在 .h 文件中只写函数的声明,在 .cpp 文件中写函数的具体实现 [13:53]。
  3. 缺少入口点 (Missing Entry Point) [03:12]
    • 原因:当程序被设置为生成一个可执行文件(.exe),但链接器找不到 main 函数时,就会发生这个错误。
留言