vc6在build过程中遇到错误,提示为“error LNK2001: unresolved external symbol _函数名”

在C++项目中,出现'error LNK2001: unresolved external symbol'错误通常是因为C++与C文件交互时的链接问题。文章通过分析一个实例,解释了C++的名称修饰与C语言的不同,导致调用C函数时的冲突。解决方案是使用extern "C"来明确函数调用规范,确保C++编译器按C语言的规则处理函数名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RT

背景:最近在学习数据结构,今天编写了链表程序作练习。

描述:我先新建一个win32控制台工程(建立向导中选择的好像是“hello,word!”),命名为list工程,在list工程中我编写了list.cpp(直接在向导建立的cpp上修改和编写的,虽然是cpp文件,但是里面没有用到c++)和list.h 。然后继续做基数排序的练习,需要用到链表的函数。于是我新建了一个win32控制台工程,名为RadixSort,拷过来了list.c和list.h,并且删去了list中的main( )部分,新建一个main.c文件用来编写新的代码,在main.c中调用了list.cpp中的函数,于是出现了题目中提示的错误。以下分析主要针对第二个工程,也就是RadixSort工程。

分析:

1)list.cpp和main.c单独compile都没报错,但是整个工程build会报错,说明单个的文件里面是没有语法错误的。

2)在main.c中已经#include"list.h"了,并且可以使用list.h中定义的结构体类型定义变量。仅是在main.c中调用list.cpp的函数会报错。说明必有蹊跷。


百度了error LNK2001: unresolved external symbol _ ,相关的问题很多、很杂。

和我遇到的问题最相像的是这篇帖子:http://tangyahai.blog.163.com/blog/static/1036702592012111604735465/

后来发现原创出自这里:http://blog.youkuaiyun.com/wujian53/article/details/706975

引用这篇帖子里面的一个知识点:C++重载的函数命名方式和C函数的命名方式,让我们回顾一下:C中函数编译后命名会在函数名前加以"_",比如add函数编译成obj文件时的实际命名为_add,而c++命名则不同,为了实现函数重载同样的函数名add因参数的不同会被编译成不同的名字。

于是怒改list.cpp文件名为list.c(内容不改)。再build,就ok了。

总结

在引用读卡器头文件时,会报错TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* TyA_CS_Write)(void *,unsigned char,unsigned char *)" (?TyA_CS_Write@@3P6GHPAXEPAE@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* TyA_CS_Read)(void *,unsigned char,unsigned char *,unsigned char *)" (?TyA_CS_Read@@3P6GHPAXEPAE1@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* TyA_CS_Authentication2)(void *,unsigned char,unsigned char,unsigned char *)" (?TyA_CS_Authentication2@@3P6GHPAXEEPAE@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* TyA_Halt)(void *)" (?TyA_Halt@@3P6GHPAX@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* TyA_Select)(void *,unsigned char *,unsigned char,unsigned char *)" (?TyA_Select@@3P6GHPAXPAEE1@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* TyA_Anticollision)(void *,unsigned char,unsigned char *,unsigned char *)" (?TyA_Anticollision@@3P6GHPAXEPAE1@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* TyA_Request)(void *,unsigned char,unsigned short *)" (?TyA_Request@@3P6GHPAXEPAG@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* Sys_InitType)(void *,unsigned char)" (?Sys_InitType@@3P6GHPAXE@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* Sys_SetAntenna)(void *,unsigned char)" (?Sys_SetAntenna@@3P6GHPAXE@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* Sys_SetBuzzer)(void *,unsigned char)" (?Sys_SetBuzzer@@3P6GHPAXE@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* Sys_SetLight)(void *,unsigned char)" (?Sys_SetLight@@3P6GHPAXE@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* Sys_Close)(void * *)" (?Sys_Close@@3P6GHPAPAX@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* Sys_IsOpen)(void *)" (?Sys_IsOpen@@3P6GHPAX@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* Sys_Open)(void * *,unsigned long,unsigned short,unsigned short)" (?Sys_Open@@3P6GHPAPAXKGG@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* Sys_GetHidSerialNumberStr)(unsigned long,unsigned short,unsigned short,char *,unsigned long)" (?Sys_GetHidSerialNumberStr@@3P6GHKGGPADK@ZA) TransJoborderDlg.obj : error LNK2001: unresolved external symbol "int (__stdcall* Sys_GetDeviceNum)(unsigned short,unsigned short,unsigned long *)" (?Sys_GetDeviceNum@@3P6GHGGPAK@ZA)这个如何解决
最新发布
07-03
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值