C语言中link的错误解决方案

合集下载

C++常见编译链接错误即解决方法

C++常见编译链接错误即解决方法

C++常见编译链接错误即解决⽅法C++课程上机实验常见错误汇集1.在源码中遗失“;”调试器错误信息:syntax error : missing ';'2.缺少命名空间使⽤定义:即缺少“using namespace std;”调试器错误信息:例:error C2065: 'cout' : undeclared identifier例如cout/cin/endl/<>等在命名空间中定义的符号和标⽰符⽆法使⽤。

3.变量未定义就直接使⽤调试器错误信息:例:error C2065: 'i' : undeclared identifierC++语⾔中,变量的使⽤必需遵循先声明定义,后使⽤的原则。

4.在程序中使⽤中⽂标⽰符,如将英⽂”;”错误输⼊成了”;”调试器错误信息:error C2018: unknown character '0xa3'在C++中,除程序注释可以采⽤中⽂外,其余字符要求使⽤英⽂。

不少同学在建⽴⼯程或程序名称时也使⽤中⽂名称,建议改掉这种习惯。

5.在使⽤输⼊输出流的时候错误使⽤了标⽰符“>>”“<<”,例cout>>a;调试器错误信息:例:error C2676: binary '>>' : 'classstd::basic_ostream>' does not define this operator or a conversion to a type acceptable to the predefined operator对于流操作的⽅向搞错是⼀个普遍错误,问题本来并不复杂,可能是由于没有认真看书的原因。

6.定义的变量类型与使⽤不对应,如声明为float,但实际给与了⼀个double 的值,例:float pi=3.412345245656245;调试器错误信息:warning C4305: 'initializing' : truncation from 'const double' to 'float'7.变量在赋值之前就使⽤,例:int a, b, c; c=a+b; cin>>a>>b;调试器错误信息:warning C4700: local variable 'a' used without having been initialized出现这种错误主要是对⾯向过程的程序执⾏没有理解。

C语言中link的错误解决方案

C语言中link的错误解决方案

link错误-link4098libcmtd.lib(tolower.obj) : error LNK2005: __tolower already defined in libcd.lib(tolower.obj) libcmtd.lib(tolower.obj) : error LNK2005: _tolower already defined in libcd.lib(tolower.obj) libcd.lib(crt0init.obj) : warning LNK4098: defaultlib "libcmtd.lib" conflicts with use of other libs; use /NODEFAULTLIB:libraryDebug/VGS2DEBUGDLL.exe : fatal error LNK1169: one or more multiply defined symbols found Error executing link.exe.解决方案:Project -> Settings -> Link -> project option中加入/nodefaultlib:"LIBCMTD"error LNK2001: unresolved external symbol _main解决办法解决外部符号错误:_main,_WinMain@16,__beginthreadex在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有柚煤孟钅坎问? 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainLIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16 nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex1. Windows子系统设置错误, 提示:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainWindows项目要使用Windows子系统, 而不是Console, 可以这样设置:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows2. Console子系统设置错误, 提示:LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16控制台项目要使用Console子系统, 而不是Windows, 设置:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:windows改成/subsystem:console3. 程序入口设置错误, 提示:msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:[Project] --> [Settings] --> 选择"Link"属性页,在Category中选择Output,再在Entry-point symbol中填入wWinMainCRTStartup, 即可4. 线程运行时库设置错误, 提示:nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex这是因为MFC要使用多线程时库, 需要更改设置:[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Code Generation,再在Use run-time library中选择Debug Multithreaded或者multithreaded其中,Single-Threaded 单线程静态链接库(release版本)Multithreaded 多线程静态链接库(release版本)multithreaded DLL 多线程动态链接库(release版本)Debug Single-Threaded 单线程静态链接库(debug版本)Debug Multithreaded 多线程静态链接库(debug版本)Debug Multithreaded DLL 多线程动态链接库(debug版本)单线程: 不需要多线程调用时, 多用在DOS环境下多线程: 可以并发运行静态库: 直接将库与程序Link, 可以脱离MFC库运行动态库: 需要相应的DLL动态库, 程序才能运行release版本: 正式发布时使用debug版本: 调试阶段使用fatal error C1083: Cannot open include file: '': No such file or directory答案在VC++的Tools/Option/Directory的Include和Library中加入相关路径nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argvnafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argcnafxcw.lib(apphelp.obj) : error LNK2001: unresolved external symbol __mbctypenafxcw.lib(filelist.obj) : error LNK2001: unresolved external symbol __mbctypenafxcw.lib(dcprev.obj) : error LNK2001: unresolved external symbol __mbctypenafxcw.lib(timecore.obj) : error LNK2001: unresolved external symbol __mbctype..\..\Output\Release/FirewallMan.exe : fatal error LNK1120: 3 unresolved externals解决方法:在Preprocessor中定义_AFXDLL如果它提示:fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds就这样改:C/C++->Code Generation->Multithread DLL (即实现/MD选项)int WINAPI RmuGetPaStatus (HANDLE hCom, UCHAR* uStatus, UCHAR flagCrc);其中,UCHAR*uStatus是一个传递的地址,关联位置可填地址并且在外部利用指针得到值。

LINK错误总结

LINK错误总结

LINK错误总结学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。

产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。

如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。

初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:unresolved external symbol “symbol”。

如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。

一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。

以下是可能产生LNK2001错误的原因:一.由于编码错误导致的LNK2001。

1.不相匹配的程序代码或模块定义文件能导致LNK2001。

例如,如果在C++源文件内声明了一变量“var1”,却试图在另一文件内以变量“V AR1”访问该变量,将发生该错误。

2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定义将导致LNK2001错误。

3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001。

4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。

5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。

静态函数和静态变量具有相同的使用范围限制。

当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。

函数内声明的变量只能在该函数的范围内使用。

C++的全局常量只有静态连接性能。

这不同于C,如果试图在C++的多个文件内使用全局变量也会产生LNK2001错误。

一种解决的方法是需要时在头文件中加入该常量的初始化代码,并在.CPP文件中包含该头文件;另一种方法是使用时给该变量赋以常数。

LINK2005错误——重复定义错误

LINK2005错误——重复定义错误

LINK2005错误——重复定义错误编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。

弄清楚它形成的原因,就可以轻松解决它了。

造成LNK2005错误主要有以下几种情况:1.重复定义全局变量。

可能存在两种情况:A、对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。

其实这是错误的,全局变量是针对整个工程的。

正确的应该是在一个CPP文件中定义如下:int g_Test;那么在使用的CPP文件中就应该使用:extern int g_Test即可,如果还是使用int g_Test,那么就会产生LNK2005错误,一般错误错误信息类似:AAA.obj error LNK2005 int book c?book@@3HA already defined in BBB.obj。

切记的就是不能给变量赋值否则还是会有LNK2005错误。

这里需要的是“声明”,不是“定义”!根据C++标准的规定,一个变量是声明,必须同时满足两个条件,否则就是定义:(1)声明必须使用extern关键字;(2)不能给变量赋初值所以,下面的是声明:extern int a;下面的是定义int a; int a = 0; extern int a =0;B、对于那么编程不是那么严谨的程序员,总是在需要使用变量的文件中随意定义一个全局变量,并且对于变量名也不予考虑,这也往往容易造成变量名重复,而造成LNK2005错误。

2.头文件的包含重复。

往往需要包含的头文件中含有变量、函数、类的定义,在其它使用的地方又不得不多次包含之,如果头文件中没有相关的宏等防止重复链接的措施,那么就会产生LNK2005错误。

解决办法是在需要包含的头文件中做类似的处理:#ifndef MY_H_FILE //如果没有定义这个宏#define MY_H_FILE //定义这个宏……. //头文件主体内容…….#endif上面是使用宏来做的,也可以使用预编译来做,在头文件中加入:#pragma once//头文件主体3.使用第三方的库造成的。

处理cclink通讯问题的方法分享

处理cclink通讯问题的方法分享

处理cclink通讯问题的方法分享处理cclink通讯问题的方法分享1. 引言在自动化控制系统中,CCLink是一种基于现场总线技术的通信协议,广泛应用于工业领域。

然而,在实际应用过程中,我们不可避免地会遇到CCLink通讯问题。

本文将分享一些处理CCLink通讯问题的方法,帮助读者更好地解决和预防这些问题。

2. 确定问题的性质和范围当我们面对CCLink通讯问题时,首先需要确定问题的性质和范围。

这包括但不限于以下几个方面:a. 连接问题:检查CCLink连接线路是否正确连接,并确保连接器处于良好状态。

b. 传输问题:检查CCLink网络传输是否稳定,排除相关设备故障导致的通讯问题。

c. 配置问题:检查CCLink配置文件的正确性,包括节点位置区域、速率、通讯参数等。

d. 软件问题:排查PLC程序、人机界面等软件相关问题,确保其与CCLink通讯正常。

3. 故障排除步骤针对不同的CCLink通讯问题,我们可以采取以下步骤进行故障排除:步骤一:检查硬件连接在排除硬件连接问题方面,我们可以按照以下几点进行检查:- 检查CCLink网络拓扑结构,确保所有节点连接正确、无误。

- 检查连接线和连接器,确保物理连接良好。

- 检查节点位置区域和速率配置,确保设备与CCLink网络相匹配。

步骤二:检查网络传输在排除网络传输问题方面,我们可以采取以下措施:- 使用网络分析仪等工具监测CCLink网络传输状态,检查是否存在通讯错误和丢包现象。

- 判断CCLink网络负载是否过高,如有需要,可以对网络进行优化处理。

步骤三:检查配置文件在排除配置问题方面,我们应该:- 检查CCLink节点位置区域的设置是否正确。

- 检查CCLink的速率是否与相关设备相匹配。

- 检查通讯参数的配置是否正确。

步骤四:排查软件问题在排查与软件相关的问题方面,我们可以:- 检查PLC程序是否正确、完整。

- 检查人机界面的设置是否正确。

- 检查相关软件是否升级至最新版本,并进行适当的修复或更新。

C++常见编译链接错误即解决方法概要

C++常见编译链接错误即解决方法概要

C++课程上机实验常见错误汇集1.在源码中遗失“;”调试器错误信息:syntax error : missing ';'2.缺少命名空间使用定义:即缺少“using namespace std;”调试器错误信息:例:error C2065: 'cout' : undeclared identifier例如cout/cin/endl/<</>>等在命名空间中定义的符号和标示符无法使用。

3.变量未定义就直接使用调试器错误信息:例:error C2065: 'i' : undeclared identifierC++语言中,变量的使用必需遵循先声明定义,后使用的原则。

4.在程序中使用中文标示符,如将英文”;”错误输入成了”;”调试器错误信息:error C2018: unknown character '0xa3'在C++中,除程序注释可以采用中文外,其余字符要求使用英文。

不少同学在建立工程或程序名称时也使用中文名称,建议改掉这种习惯。

5.在使用输入输出流的时候错误使用了标示符“>>”“<<”,例cout>>a;调试器错误信息:例:error C2676: binary '>>' : 'classstd::basic_ostream<char,struct std::char_traits<char> >' does not define this operator or a conversion to a type acceptable to the predefined operator对于流操作的方向搞错是一个普遍错误,问题本来并不复杂,可能是由于没有认真看书的原因。

6.定义的变量类型与使用不对应,如声明为float,但实际给与了一个double 的值,例:float pi=3.412345245656245;调试器错误信息:warning C4305: 'initializing' : truncation from 'const double' to 'float'7.变量在赋值之前就使用,例:int a, b, c; c=a+b; cin>>a>>b;调试器错误信息:warning C4700: local variable 'a' used without having been initialized出现这种错误主要是对面向过程的程序执行没有理解。

执行link.exe时出错.

执行link.exe时出错.

执行link.exe时出错.执行 link.exe 时出错.Linking...LINK : warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use DEFAULTLIB:libraryLIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainDebug rver.exe : fatal error LNK1120: 1 unresolved externals 执行 link.exe 时出错.Server.exe - 1 error(s), 0 warning(s)最佳答案1、fatal error C1010: unexpected end of file while looking for precompiled header directive。

寻找预编译头文件路径时遇到了不该遇到的文件尾。

(一般是没有#include "stdafx.h")2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory不能打开包含文件“R…….h”:没有这样的文件或目录。

3、error C2011: 'C……': 'class' type redefinition类“C……”重定义。

4、error C2018: unknown character '0xa3'不认识的字符'0xa3'。

(一般是汉字或中文标点符号)5、error C2057: expected constant expression希望是常量表达式。

(一般出现在switch语句的case分支中)6、error C2065: 'IDD_MYDIALOG' : undeclared identifier“IDD_MYDIALOG”:未声明过的标识符(此例为对话框未定义)。

Link2019

Link2019

Link2019展开全文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 unresolved externals error executing link.exe;二,产生这个问题可能的原因1,你用vc建了一个控制台程序,它的入口函数应该是main, 而你使用了WinMain.2. 你用vc打开了一个.c/.cpp 文件,然后直接编译这个文件,这个文件中使用了WinMian而不是main作为入口函数。

vc这时的默认设置是针对控制台程序的。

三,解决方法1.进入project->setting->c/c++, 在category中选择preprocessor,在processor definitions中删除_CONSOLE, 添加_WINDOWS2.进入project->setting->Link, 在Project options中将/subsystem:console改为/subsystem:windows.3.保存设置,Rebuild All.VS2005中的设置请参考对应项进行设置四,VS2005中的设置1.菜单中选择 Project->Properties, 弹出Property Pages窗口2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_CONSOLE, 添加_WINDOWS.3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为Windows(/SUBSYSTEM:WINDOWS)4.Rebuild All. Ok ?测试:(环境:vs2005,编程语言vc)1.用文本编辑器编写如下代码:// test.c#i nclude <windows.h>int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){MessageBox(NULL, "Hello!", "title", MB_OK);}假设把文件包存为test.c.2.用vs2005建一个Win32 Console Application, 注意在Application Settings设置为Empty project. 然后把test.c添加到工程中去。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

link错误-link4098
libcmtd.lib(tolower.obj) : error LNK2005: __tolower already defined in libcd.lib(tolower.obj) libcmtd.lib(tolower.obj) : error LNK2005: _tolower already defined in libcd.lib(tolower.obj) libcd.lib(crt0init.obj) : warning LNK4098: defaultlib "libcmtd.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
Debug/VGS2DEBUGDLL.exe : fatal error LNK1169: one or more multiply defined symbols found Error executing link.exe.
解决方案:Project -> Settings -> Link -> project option中加入/nodefaultlib:"LIBCMTD"
error LNK2001: unresolved external symbol _main解决办法
解决外部符号错误:_main,_WinMain@16,__beginthreadex
在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有柚煤孟钅坎问? 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16 nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
1. Windows子系统设置错误, 提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:
[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows
2. Console子系统设置错误, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
控制台项目要使用Console子系统, 而不是Windows, 设置:
[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:windows改成/subsystem:console
3. 程序入口设置错误, 提示:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:
[Project] --> [Settings] --> 选择"Link"属性页,在Category中选择Output,再在Entry-point symbol中填入wWinMainCRTStartup, 即可
4. 线程运行时库设置错误, 提示:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
这是因为MFC要使用多线程时库, 需要更改设置:
[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Code Generation,再在Use run-time library中选择Debug Multithreaded或者multithreaded
其中,
Single-Threaded 单线程静态链接库(release版本)
Multithreaded 多线程静态链接库(release版本)
multithreaded DLL 多线程动态链接库(release版本)
Debug Single-Threaded 单线程静态链接库(debug版本)
Debug Multithreaded 多线程静态链接库(debug版本)
Debug Multithreaded DLL 多线程动态链接库(debug版本)
单线程: 不需要多线程调用时, 多用在DOS环境下
多线程: 可以并发运行
静态库: 直接将库与程序Link, 可以脱离MFC库运行
动态库: 需要相应的DLL动态库, 程序才能运行
release版本: 正式发布时使用
debug版本: 调试阶段使用
fatal error C1083: Cannot open include file: '': No such file or directory
答案
在VC++的Tools/Option/Directory的Include和Library中加入相关路径
nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argv
nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argc
nafxcw.lib(apphelp.obj) : error LNK2001: unresolved external symbol __mbctype
nafxcw.lib(filelist.obj) : error LNK2001: unresolved external symbol __mbctype
nafxcw.lib(dcprev.obj) : error LNK2001: unresolved external symbol __mbctype
nafxcw.lib(timecore.obj) : error LNK2001: unresolved external symbol __mbctype
..\..\Output\Release/FirewallMan.exe : fatal error LNK1120: 3 unresolved externals
解决方法:
在Preprocessor中定义_AFXDLL
如果它提示:fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
就这样改:
C/C++->Code Generation->Multithread DLL (即实现/MD选项)
int WINAPI RmuGetPaStatus (HANDLE hCom, UCHAR* uStatus, UCHAR flagCrc);
其中,UCHAR*uStatus是一个传递的地址,关联位置可填地址并且在外部利用指针得到值。

相关文档
最新文档