首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

未解决的外部符号

“未解决的外部符号”(Unresolved External Symbol)是编程中常见的链接错误,通常出现在C/C++项目中。这类错误表示编译器在链接阶段找不到某个函数或变量的定义。以下是一些常见的原因及解决方法:

常见原因

  1. 缺少库文件
    • 使用了某个函数或类,但没有链接相应的库文件。
  2. 函数声明与定义不匹配
    • 函数声明和定义的签名不一致,例如参数类型或数量不同。
  3. 名称修饰(Name Mangling)不匹配
    • C++编译器会对函数名进行修饰,若混用C和C++代码,可能导致名称不匹配。
  4. 静态成员变量未定义
    • 声明了静态成员变量但未在任何源文件中定义。
  5. 模板未实例化
    • 模板函数或类在使用前未进行实例化。
  6. 项目设置问题
    • 编译器设置不正确,如未包含必要的头文件路径或库路径。

解决方法

  1. 检查缺少的库文件
    • 确认是否需要链接特定的库文件(如 .lib, .a),并在项目设置中添加这些库。
    • 例如,在Visual Studio中,可以在“链接器” -> “输入” -> “附加依赖项”中添加所需的库。
  2. 核对函数声明与定义
    • 确保所有函数的声明和定义完全一致,包括返回类型、函数名和参数列表。
  3. 处理名称修饰
    • 如果在C++中调用C函数,使用 extern "C" 来防止名称修饰。extern "C" { #include "c_library.h" }
  4. 定义静态成员变量
    • 在类外定义静态成员变量。// 头文件 class MyClass { public: static int myVar; }; // 源文件 int MyClass::myVar = 0;
  5. 实例化模板
    • 确保模板在使用前已被实例化,或将模板定义放在头文件中。
  6. 检查项目设置
    • 确认项目的包含路径和库路径设置正确。
    • 确保所有源文件都已正确添加到项目中并参与编译。
  7. 查看详细的错误信息
    • 仔细阅读编译器提供的错误信息,通常会指明哪个符号未解决以及出现在哪个文件中,这有助于定位问题。

示例

假设你在使用 printf 函数时遇到未解决的外部符号错误:

代码语言:javascript
复制
// main.cpp
#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

可能的原因

  • 缺少标准C库的链接。

解决方法

  • 在Visual Studio中,确保在“链接器” -> “输入” -> “附加依赖项”中包含 legacy_stdio_definitions.lib 或其他相关库。

总结

“未解决的外部符号”错误通常与链接阶段相关,解决这类问题需要仔细检查项目的依赖关系、函数声明与定义的一致性以及项目的编译设置。通过逐步排查上述可能的原因,通常可以找到并解决问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

无法解析的外部符号解决方法汇总

二、无法解析的外部符号问题 出现这个问题,不用怀疑,一定是你没有包含lib库,或者没有正确包含lib库。何谓没有正确包含?...高级玩家看: 当然我刚才说的出现“无法解析的外部符号”就是没有正确包含lib库仍有些片面,例如,Visual Studio的一个解决方案有A、B两个工程,B生成dll供A使用,A正确包含了B的dll和lib...,可是有时候还是会出现B总定义的函数“无法解析的外部符号”问题。...三、visual studio 诡异bug 没有使用其他lib库,只是一个.cpp文件使用另一个.cpp文件里定义的类函数,结果一直报“无法解析的外部符号错误”。...,总有几个“无法解析的外部符号”错误解决不了,函数都是有定义的。

19K10

解决:无法解析的外部符号__iob_func

解决: 无法解析的外部符号 __iob_func在使用C/C++编程语言进行项目开发时,有时可能会遇到编译错误,其中一个常见的错误是无法解析的外部符号__iob_func。...解决方法通常来说,解决无法解析的外部符号__iob_func错误可以通过以下步骤来实现:1. 检查编译选项首先,我们需要确保编译器的配置正确。...希望本篇文章对解决无法解析的外部符号__iob_func错误提供了一些帮助和指导。...当编译这个示例代码时,可能会遇到“无法解析的外部符号__iob_func”错误。这是因为编译器无法找到标准库函数的实现导致的。...code-lc通过执行以上步骤,我们可以解决“无法解析的外部符号__iob_func”错误,使得代码能够正常编译和执行。

92610
  • 无法解析外部符号

    大家好,又见面了,我是你们的朋友全栈君。 本人在写qt工程的时候遇到无法解析外部符号 原因:只写了类声明,但还没有写实现类,造成调用时无法解析。...解决方法,把还没有实现类的声明给注释掉。 参考博客无法解析的外部符号 考虑可能的原因: [0]出现无法解析可能是因为lib文件不正确,比如64位的编译配置,结果使用的是32位的lib包....[7]import相关的无法解析内容,解决办法是在链接器的依赖项中加入相应的动态库 [8]出现如下错误的原因一般是动态库没有包进来。...__imp ProjectRun.obj : error LNK2019: 无法解析的外部符号 __imp__StartHistoryLocalModule,该符号在函数 “protected: virtual...DoStart@CProjectRun@HiRTDB@@MAEHXZ) 中被引用 [9]error LNK2001: 无法解析的外部符号 __imp___CrtDbgReportW 工程属性,C

    2.7K20

    关于各种无法解析的外部符号问题的相应解决方案

    大家好,又见面了,我是你们的朋友全栈君。 在使用vs2008调试程序的过程中,经常会出现无法解析的外部符号问题,可能的原因有很多种,下面这些是我一年来积累的经验. 仅供参考....[7]import相关的无法解析内容,解决办法是在链接器的依赖项中加入相应的动态库 [8]出现如下错误的原因一般是动态库没有包进来。...__imp ProjectRun.obj : error LNK2019: 无法解析的外部符号 __imp__StartHistoryLocalModule,该符号在函数 “protected: virtual...DoStart@CProjectRun@HiRTDB@@MAEHXZ) 中被引用 [9]error LNK2001: 无法解析的外部符号 __imp___CrtDbgReportW 工程属性,C.../C++,代码生成,运行时库选择MDd, [9]无法解析的外部符号”_declspec(dllimport) public: int __thiscall HiRTDB::CTagTree::GetObjectA

    89510

    error LNK2019: 无法解析的外部符号_error lnk2019无法解析的外部符号

    大家好,又见面了,我是你们的朋友全栈君。 废话不多说,直接上错误图片 原本是生成一个静态链接库,然后在主函数中进行库函数的调用,编写静态库时,没存在此问题,在主函数中一调用就报错。...添加库连接,附加依赖项——也无法彻底解决此问题。 原来是从 Visual Studio 2010 开始, Visual Studio 要求 项目到项目引用。...如果你的项目没有项目到项目引用,那么你可能收到此链接器错误。 添加项目到项目引用以修复此错误。 右击属性,找到添加栏,再点击引用,把编译成功的静态库或动态链接库添加进去就OK了。...当然还有其他原因也可能造成此类问题 微软官方给出的一些参考方案。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.8K10

    lnk2019无法解析的外部符号_declspec_无法解析的外部符号lnk2001

    大家好,又见面了,我是你们的朋友全栈君。...Visual Studio2015编译中出现此问题:error LNK2019: 无法解析的外部符号 __vsnprintf,该符号在函数xxxx中被引用 解决方案: 1、可能是由于某些头文件的函数或者未连接某些链接库所引起...2、在项目工程属性中将MFC的使用变为“在共享DLL中使用MFC” 3、编译时加入以下代码 #include #include int (WINAPIV...* __vsnprintf)(char *, size_t, const char*, va_list) = _vsnprintf; 4、如若还未解决可参考此文章 版权声明:本文内容由互联网用户自发贡献...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.9K20

    mold源码阅读九 未解析符号的处理

    ,针对部分符号产生一些修改,在这个过程之后,不会再有符号发生新的变动了 对so来说undef是可以存在的,因此将避免报错,将undef的符号转换为imported,并且修改相关信息。...esym 将protected和hidden的符号进行报错 对esym对应位置的sym进行判断,如果sym所对应的esym是有定义的也跳过。...这种情况是esym实际的定义在其他位置,sym是esym resolve的结果 解析符号名,如果带有版本信息则再次尝试进行重新将esym和sym进行关联。...在一个obj a里面,有一个未定义的符号,链接的时候另一个obj b包含了这个符号的定义,那么这就算是a依赖b。...info 所有的输入文件 也就表示这三者就是确定问题的必要条件,另外还可以认为执行到这里之后符号不会再发生什么改动,也不会产生新的用户引发的问题(比如说少链接文件,或者什么参数错了导致符号决议出问题等

    20810

    C++之Error无法解析的外部符号

    前言,相信在使用C++编程的小伙伴都会遇到这样一个错误,在编译的时候出现Error,无法解析的外部符号,这是让人很费解的一件事情,因为不会报出哪一行出现了问题,以至于问题排查很难进行,所以为大家提供了相关解决思路...文章目录 问题一 无法解析的外部符号 问题二 error LNK1104:无法打开文件lib 问题三 debug不可以运行,release可以运行 问题一 无法解析的外部符号 [问题描述] 在编译中遇到...,viaual studio无法解析的外部符号 该符号在外部函数中被引用 [问题处理] 1....[问题处理] 通过排查外部的链接库以及相关其他配置均没有问题,但是在编译生成文件时出现“LNK4098: 默认库“MSVCRT”与其他库的使用冲突”,通过右击工程 – 属性 ”配置属性 – 链接器 –...命令行” 添加: /NODEFAULTLIB:”libcmt.lib”该问题得到解决。

    3K10

    error link2019无法解析的外部符号_inferior

    大家好,又见面了,我是你们的朋友全栈君。 最近在用VS 2008开发,初学遇到不少问题,最头疼的问题之一就是:LNK2019。 百度一下讲的并不够全面,反正都没解决我的问题。...编译时出现类似这样的错误:Dlgcode.obj : error LNK2019: 无法解析的外部符号 _readRegmark,该符号在函数 _AboutDlgProc@16 中被引用。...也可能出现于在解决方案的开发过程,在解决方案下的某个工程中加入了它们却忘了在其他工程中加入,我只接触过VC 6和VS 2008,中间好多年没用过新版本VS,到2008时突然发现怎么多了个“解决方案”,“...解决方案”下面还可以放好多工程,于是经常在一个工程中写了共享的源代码,却忘了在别的工程中加入它们。...解决:在C语言的头文件中加入 #ifdef __cplusplusextern “C”{#endif void readRegmark(char *regmark); //这里写函数声明 #ifdef

    1.6K20

    LNK2001: 无法解析的外部符号的几种情况

    大家好,又见面了,我是你们的朋友全栈君。 一般来说,我们引用第三方库时,需要进行指定依赖项配置,若没有进行相关配置,则编译器会出现“LNK2001: 无法解析的外部符号”错误。...这个是最常见的问题,具体步骤: 项目、属性、链接器、常规、附加库目录:填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项 若已经按照上述步骤进行配置...,但编译器还是报错,可能情况如下: 1.编译lib库和引用lib库平台不一致 lib库采用的编译平台和引用该lib的工程的编译平不兼容导致的。...比如项目采用vs2008编译,而该lib是用2010编译的,亦或者项目采用vs2015平台,而lib是vs2008编译的也可能导致链接失败。...curl_easy_perform 1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_cleanup 解决方法是

    8.9K20

    VS2015下解决:error LNK2019: 无法解析的外部符号 __iob_func

    在使用VS2015下使用libjpeg-turbo静态库,编译时报错了: error LNK2019: 无法解析的外部符号 __iob_func,该符号在函数 output_message 中被引用...根据关键字在网上找到一些文章描述了类似的错误,大都是找不到外部符号__iob,原因是VS2010上使用了VC6编译的DLL。...虽然与我的情况不同,但是原理是一样的,我遇到的这个问题的原因是VS2015下使用VS2010编译的静态库,因为我用的libjpeg-turbo静态库是从官网下载编译好的版本(应该是vs2010这样的版本编译的...(1)) #define stderr (__acrt_iob_func(2)) 原来在VS2015中__iob_func改成了__acrt_iob_func,所以我参照《【LNK2019】 无法解析的外部符号...:找不到__iob_func, * 增加__iob_func到__acrt_iob_func的转换函数解决此问题, * 当libjpeg-turbo用vs2015编译时,不需要此补丁文件 */ #

    2.3K40

    vs报错“错误 LNK2019 无法解析的外部符号”的几种原因及解决方案

    运行vs程序的时候,报错严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 "__declspec(dllimport) public: void __cdecl...setptClouds@PointCloudFilter@@QEAAXPEAULAS_POINT@@@Z),该符号在函数 "private: void __cdecl PointCloudFilters...解决的方法通常有以下几种: 如果是在写代码阶段就报错了(当然如果是这种情况,报错的内容也就不是这样的了,这里只是顺便提一下),那一般是因为包含目录没有设置对,导致程序无法找到外部库的函数定义;而如果是自定义的函数找不到...如果是运行时报错,常见的原因是你引用了某个库的函数,然后也正确添加了它的头文件路径,vs在写代码阶段可以找到这个函数的定义,但是,由于你没有添加或者正确设置这个库的lib或者dll路径的话,那么vs就会在运行时候报错无法解析的外部符号...那就是你需要确认一下你在属性页的程序配置平台和实际运行的配置平台是一致的,如下图所示: 其他一些特殊问题的解决方案:一个解决方案中包含多个项目且它们之间存在相互引用的情况,opencv imwrite

    22.1K10

    {“error”:”0″}_lnk2019无法解析的外部符号_public

    出现此种错误,大多是找不到相应的库文件,但是检查自己的项目属性及链接器配置都没有问题,最后通过添加预处理命令方式解决。   ...}   在添加头文件处添加预处理指令,#pragma comment(lib,“xxx.lib”),xxx代表lib所在路径及文件名,添加后,程序调用成功,如下图所示,   虽然程序调用问题解决了...,但是仍有一点疑惑:为什么在项目包含目录、库目录和链接器输入等项目属性都配置无误的情况下出现这种错误,望大佬在评论中给解释一下,非常感谢!   ...本文是在项目配置无误情况下出现这种问题的解决方法,对于项目配置有问题的伙伴可参考以下链接: 参考链接1 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1K30
    领券