unresolved external symbol 问题

undefined symbol问题的查找、定位与解决方法 最近发现一个程序执行中报错,报错内容如下,这里对排查和修复方法做一个记录。先说结论,比方说你编译时只加入了头文件*.h,而函数实现部分.c,文件未编译进去,这时候就会出现undefined symbol。还有一种情况是,在C++代码调用C语言代码也会导致出现,原因是,这就会导致*.h文件中定义的函数,找不到对应.c文件中的实现。解决办法是在*.h文件中添加将C语言的函数声明括起来即可。 阅读详情

     学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时, 编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不 明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非 常困难。   
     初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为: unresolved   external   symbol   “symbol”(不确定的外部“符号”)。   
   如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。一般来说,发生错误的原因有两个:一是所引用 的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。   
   

以下是可能产生LNK2001错误的原因:  

 
 一.由于编码错误导致的LNK2001。   
    1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如, 

             如果在C++   源文件内声明了一变量“var1”,却试图在另一文件内以变量   
            “VAR1”访问该变量,将发生该错误。   
    2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定   
             义将导致LNK2001错误。   
    3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生   
             LNK2001。   
    4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。   
    5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。   
         静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或   LNK2001。   
        函数内声明的变量(局部变量)   只能在该函数的范围内使用。   
        C++   的全局常量只有静态连接性能。这不同于C,如果试图在C++的多个文件内使用全局变量也会产生LNK2001错误。一种 解决的方法是需要时在头文件中加入该常量的初始化代码,并在.CPP文件中包含该头文件;另一种方法是使用时给该变量赋以常数。  

 
二.由于编译和链接的设置而造成的LNK2001   
    1.如果编译时使用的是/NOD(/NODEFAULTLIB)选项,程序所需要的运行库和MFC库在连接时由编译器写入目标文件模块,   但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。在这种情况下使用/NOD将导   
致错误LNK2001。   
    2.如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将得到“unresolved   external   on   _WinMain@16”的LNK2001错误信息。   
    3.使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func”   的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行连接,将在__imp__func上发生LNK2001;如果不使用/MD选项编译,在使用MSVCxx.LIB连接时也会发生LNK2001。   
    4.使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001。   
    5.当编译调试版的应用程序时,如果采用发行版模态库进行连接也会产生LNK2001;同样,使用调试版模态库连接发行版应用程序时也会产生相同的问题。   
    6.不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可   
  能包含早先的版本没有的符号和说明。   
    7.在不同的模块使用内联和非内联的编译选项能够导致LNK2001。如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头 文件里却关闭了函数内联(没有inline关键字),这时将得到该错误信息。   
为避免该问题的发生,应该在相应的头文件中用inline关键字标志内联函数。   
    8.不正确的/SUBSYSTEM或/ENTRY设置也能导致LNK2001。   
    

其实,产生LNK2001的原因还有很多,以上的原因只是一部分而已,对初学者来说这些就够理解一阵子了。但是,分析错误原因的目的是为了避免错误的发生。LNK2001错误虽然比较困难,但是只要注意到了上述问题,还是能够避免和予以解决的。     

c++ 调用c代码 extern “C“ 确不能解决问题 unresolved external symbol c++ 调用c代码 extern "C" 确不能解决问题 unresolved external symbol 为什么不起作用了? cmake设置cpp工程 visual studio工程设置源代码文件编译方式 阅读详情

相关推荐

cmake和visual studio解决error LNK2019: unresolved external symbol的问题

unresolved external symbol 程序链接阶段没法找到对应的symbol,要么是函数只有一个声明放在那里而没有实现,要么是没有把第三方库添加进来。 rtkcmn.obj : error LNK2019: unresolved external symbol __imp_timeGetTime referenced in function tickget cmake 中添加外部...

从零开始 4992

用keil编译多文件程序时出现UNRESOLVED EXTERNAL SYMBOL警告

UNRESOLVED EXTERNAL SYMBOL翻译为中文为:未解决的外部符号,出现该问题的原因却是很低级,我查了好久的程序都不思其解,最后再网上找到了答案,原来是因为没有把部分.c文件添加到项目中,右击Source Group 1,选择Add Existing Files to Group 'Source Group 1'...,将源文件添加进来即可。

daze_scarecrow的博客 3万+

Xilinx Vivado LDPC IP core,TSN IP core. 各种IP core

Xilinx Vivado LDPC IP core,TSN IP core. 各种IP core

qq_1432825237的博客 3989

Keil C51从汇编跳转到main函数编译器报错ERROR L127: UNRESOLVED EXTERNAL SYMBOL的解决办法

如果你自建的汇编原文件不是以Keil默认的.A51或者.s .S结尾,而是以.asm .ASM结尾的话,在Keil工程里包含新文件时,不要使用文件类型:All files(Keil C51从汇编跳转到main函数编译器报错ERROR L127: UNRESOLVED EXTERNAL SYMBOL的解决办法。不使用Keil的默认文件,如何自己写Boot汇编文件并跳转到Main函数?),而要使用文件类型:Asm Source file(*.s;),否则Keil编译会报错,无法创建中间文件的路径。

qq582880551的博客 6915

ios快捷指令进行钉钉打卡

首先 1、打开快捷指令 2、自动化 3、创建个人自动化-特定时间 4、添加操作-搜索“随机数” 5、最小值和最大值填充 6、添加操作-搜索“等待” 7、长按“1秒钟”,选择魔法变量,选择上一步的随机数 6、添加操作-搜索“钉钉” 7、选择钉钉-随便一个聊天窗口。 8、添加操作-搜索“等待”,这次将等待时间设为10秒 9、添加操作 “搜索天气” ,选择显示天气。 注意点: 1、此操作依赖于钉钉极速打卡,只是帮忙唤起钉钉。 2、保存自动化时有个运行前询问,务必关掉。 3、手机不能设

blaze_jack 5万+

腾讯云DBA面试(一面)

在第二阶段,根据RM返回的结果,如果涉及分布式事务的所有RM都返回可以提交, 则TM给RM发送commit的命令,每个RM实现自己的提交,同时释放锁和资源,然后RM反馈提交成功, TM完成整个分布式事务;根据事务所处的阶段,可以回滚到具体的版本,实现一致性。1.并发执行的事务,在prepare阶段,redo log先写文件缓存,第一个领头的事务,在等待n个事务后, 在第一个事务去刷写磁盘时,会把同组的其他的事务,也一起刷写到磁盘上,这样就减少了刷盘的次数,降低了磁盘的IOPS。分布式锁是怎么实现的?

u012565458的博客 1977

*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL

把“Use extended linker instead of BL51”前面的√去掉就可以了,就只有警告了。不知道为啥,无意中试出来的,编译生成的hex文件用了也没问题

qq_38230414的博客 1万+

FPGA赋能:从加权灰度均值到快速收敛的自动曝光实战

本文深入探讨了FPGA在工业视觉自动曝光算法中的应用,重点介绍了加权灰度均值法的优化实现与快速收敛策略。通过硬件友好的算法改造和流水线架构设计,FPGA方案能在1帧内完成曝光调整,显著提升处理速度和能效比,适用于复杂光照条件下的工业检测场景。

weixin_29306317的博客 82

*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL

在嵌入式开发中使用 Keil 编译器时,是一个常见的错误。这个错误表示编译器在链接过程中找不到某些外部符号的定义。在代码里引用了某个函数或者变量,不过该函数或者变量却没有被定义。例如,在一个源文件里调用了一个函数,但是这个函数的实现代码并未包含在项目中。// main.c// 调用未定义的函数return 0;在这个例子中,函数未被定义,链接时就会出现未解析外部符号的错误。保证所有被引用的函数和变量都有定义。查看代码,确认在源文件中实现了所有被调用的函数。

qq_19343801的博客 2589

定制PYNQ的overlay

一、用HLS生成一个定制IP(加速器)(1)首先打开vivado hls,本人的版本是2017.2,点击创建一个新工程。(2)设置工程名和路径,顶层函数设置为add,创建一个新的C++程序,名字叫做adder.cpp,不用在testbench中添加文件。选择板子的时候搜索xc7z020clg400-1,这是PYNQ的板子号,选择完成。             (3)在左侧的菜单栏里选择Sourc...

bramblewalls的博客 1万+

边缘计算【智能+安全检测】系列教程--使用OpenCV+GStreamer实现真正的硬解码,完全消除马赛克

通过现有博客的GStreamer的解码方式解码,大多情况应该存在上图马赛克的问题,请勿紧张,其实上述url并没有调用硬件解码,后面有调用硬件解码的ULR,我们来在接下来的介绍中释获。通过RTSP协议连接海康威视摄像头将图片送入AI推理,发现OpenCV的VideoCapture使用的是软解码大量消耗了cpu的资源,并无法做到实时数据处理存在5秒钟的延时。只能把解码这部分送到硬件解码器去处理分摊掉cpu的压力,

Starry-SkyJing的博客 2426

unresolved external symbol问题

<br />unresolved external symbol 这个错误的意思是有一个函数,系统没有找到它的实现代码。<br /> 检查了一下是否已经将含有该函数实现代码的文件包含进项目。 <br /> 用了power,而不是changes这个函数名,所以出错了

you are wonderful tonight 1089

2026年3月GESP真题及题解(C++七级): 选择题和判断题(题解)

2026年3月GESP真题及题解(C++七级): 选择题和判断题(题解)

王老师青少年编程 984

error LNK2019: unresolved external symbol 问题

main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall CvSVM::~CvSVM(void)" (??1CvSVM@@UAE@XZ) referenced in function _main 1>main.obj : error LNK2019: unresolved external sy

萧瑟一笑的专栏 3万+

STM32电机PID速度控制

2.3 STM32电机PID速度控制 之前的文章,完成了直流减速电机的PWM控制、电机测速。本篇文章,将实现电机的速度闭环控制。 在公众号:小白学移动机器人,发送:速度PID,即可获得本篇文章的STM32工程文件以及相关资料。 2.3.1 解决的问题 解决带编码器直流电机的速度闭环问题。 2.3.2 PID理论 将偏差的比例、积分、微分,通过线性组合构成控制量,用控制量对被控对象进行控制,这样的控制器称为PID控制器。在连续空间中,我们通常探讨模拟PID的控制原理,如图所示: 我们这里用电机速度控制为例,

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 6万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

unresolved external symbol _Sleep和unresolved external symbol _clrscr问题 vc++

首先是clrscr() 函数的问题: clrscr是TC特有的,其它C语言环境没有这个函数,也就没有头文件包含这个函数。一般用system(“cls”)替代它,兼容性好一些。system()函数在#include 里面。 system函数,是可以调用一些DOS命令的函数。例如上面实际上就是在DOS上使用cls命令,进行清屏。 其次是Sleep()函数的问题: 在VC中使用这个函数要带上头文件#include ,而且函数中的第一个英文字符要大写。在标准c中试sleep,不要大

kofandlizi的专栏 3327

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup 问题的解决

Welcome to my blog! vc中error LNK2001:unresolved external symbol _WinMain@16的解决方法 一,问题描述 error LNK2001: unresolved external symbol _WinMain@16 debug/main.exe:fatal error LNK 1120:1

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 1746

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

unresolved external symbol 问题 ,链接错误LNK2001

在提问题之前最好先自己查一资料之类的,能自己解决的就自己解决啦,大部分错误是自己的粗心造成的。 学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于 编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时, 编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不 明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK200

zhaoyanhengibm的专栏 602

OPENGL问题:link时出现error LNK2001: unresolved external symbol ___glutInitWithExit@12的错误提示

OPENGL问题:link时出现error LNK2001: unresolved external symbol ___glutInitWithExit@12的错误提示2007-06-20 12:19   inking...      cg_h.obj    :    error    LNK2001:    unresolved    external    sym

xuehui869的专栏 2267

关于模版类编译出现unresolved external symbol的问题

问题:当模版类的定义与声明分离时会出现unresolved external symbol的编译链接问题 原因:模版类的定义编译器不会生成具体的类和类方法,而是告诉编译器应该生成什么样的类和类方法,只有在实例化之后,才会生成具体的泪对象及其方法。 解决方法:1.将模版类的定义与声明都放在一个文件中;                   2.在使用的地方不仅include,而且includ

KAZAN的博客 1379

关于inline关键字导致的 unresolved external symbol问题

//Base.h #pragma once class CBase{ public: CBase(); ~CBase(); int m_x; int m_y; virtual void DisplayPoint()=0; void DisplayX(); inline void DisplayY(); }; //Base.cpp #include "stdafx.h" #in

shdj111的专栏 953

visual studio 编译问题unresolved external symbol

1.[Warning] E:\joyshow\audio\G726Soft\G726\EncodeDecode.cpp:22: warning: `_sleep' is deprecated (declared at C:\PROGRA~2\C-Free_5.0\mingw\include\stdlib.h:395) 微软环境下用Sleep函数代替_sleep,包含头文件#include "wi

wujiewujiang的专栏 1296

Visual Studio编译QT出现的unresolved external symbol等问题解决

今天下午用VS2005编译QT. 当编译到WebKit的时候出现...unresolved external symbol...的问题. 上网搜索. 在http://blog.youkuaiyun.com/shuixin536/archive/2009/08/04/4407054.aspx找到了解决方法:进到src目录. 找到出问题组件所在的目录. 删除tmp/moc/debug_shared/moc

极简主义强迫症患者,厌恶一切非必要复杂 1959

unresolved external symbol 外部链接库问题

动态链接与静态链接相关内容。 这里面是没有包含psapi.lib的库文件 产生这个问题主要出现在 “Link” 链接过程。 在链接的时候,由于没有包含lib 就会产生链接错误。 解决办法:1、直接在“源程序”中添加, #pragma comment ( lib, "psapi" ) 意思是在编译阶段告诉编译器在编译的时候,就把 psapi的lib库加入 .lib库中进行编译。 2、在IDE中的...

唯有努力无限,才可突破极限 1837

静态函数、变量编译问题,unresolved external symbol public static

静态数据成员: 下面看一个例子: #include class Point { public: void output() { } static void init() { } }; void main( void ) { Point pt; pt.init(); pt.output();

笨笨D幸福 - 后花园 5971
上一篇: VC++6.0中常出现的"unexpected end of file while looking for precompiled header directive"的问题解决方法
下一篇: Linux 常见问题解决目录【陆续更新_自用】
auto_ptr
博客等级 码龄20年 18粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值