什么是未定义的引用/未解决的外部符号错误?什么是常见原因以及如何修复/预防它们?
原文由 Luchian Grigore 发布,翻译遵循 CC BY-SA 4.0 许可协议
什么是未定义的引用/未解决的外部符号错误?什么是常见原因以及如何修复/预防它们?
原文由 Luchian Grigore 发布,翻译遵循 CC BY-SA 4.0 许可协议
随附的 Code Runner 仅适用于具有单个源文件的已编译程序。它不是为与多个源文件一起使用而设计的。您应该使用不同的扩展名,例如 C/C++ Makefile Project 扩展名或 CMake Tools 扩展名,或者 修复 Code Runner 扩展名以处理多个文件,或者只是手动编辑您的 .json 配置文件。
原文由 n. 1.8e9-where’s-my-share m. 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
按照 2.2 的规定,编译 C++ 程序需要几个步骤 (参考 Keith Thompson) :
指定的错误发生在编译的最后阶段,通常称为链接。这基本上意味着您将一堆实现文件编译成目标文件或库,现在您想让它们一起工作。
假设您在 --- 中定义了符号
a
a.cpp
。现在,b.cpp
声明 了该符号并使用了它。在链接之前,它只是假设该符号是在 某个地方 定义的,但它并不关心在哪里。链接阶段负责找到符号并将其正确链接到b.cpp
(实际上是使用它的对象或库)。如果您使用的是 Microsoft Visual Studio,您会看到项目生成
.lib
文件。其中包含导出符号表和导入符号表。导入的符号将根据您链接的库进行解析,并为使用.lib
(如果有)的库提供导出的符号。其他编译器/平台也存在类似的机制。
Common error messages are
error LNK2001
,error LNK1120
,error LNK2019
for Microsoft Visual Studio andundefined reference to
symbolName for GCC .编码:
将使用 GCC 生成以下错误:
以及 Microsoft Visual Studio 的类似错误:
常见原因包括:
#pragma
(Microsoft Visual Studio) 时输入错误或不包括 .lib 扩展名UNICODE
定义