VS编译错误汇总(持续更新中。。。。。)

问题一:VS解决error C2664: “DWORD GetCurrentDirectoryW(DWORD,LPWSTR)”: 无法将参数 2 从“char [260]”转换为“LPWSTR”

解决办法:在项目-》属性-》配置属性-》常规-》字符集中,将当前项目的字符集选项改为使用多字节字符集。(一般VS默认的字符集为Unicode字符集)

参考网站:https://blog.csdn.net/alger_magic/article/details/79025079

问题二:VS在编译ffmpeg过程中出现如下错误:ffmpeg\include\libavutil\common.h(45): fatal error C1189: #error :  missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS

解决办法:在对应代码位置,添加如下代码:

#ifdef __cplusplus
#define __STDC_CONSTANT_MACROS
#endif

我的项目添加代码后编译顺利通过。看别人的可能还会出现别的问题,可参考如下网址:

https://blog.csdn.net/smilestone_322/article/details/17611519

问题三:在利用VS2010对opencv3.4.0 + opencv_contrib3.4.0进行编译(cmake + vs2010)的过程中,遇到E:\opencv\sources\modules\dnn\src\darknet\darknet_io.cpp:error C2065: “int32_t”: 未声明的标识符

解决办法:在darknet_io.cpp 中 #include<stdint.h> 即可

参考网站:https://blog.csdn.net/a1252221365/article/details/79446295

问题四:在利用VS2010(Release模式下)调用ffmpeg的动态库过程中,遇到如下错误:无法定位程序输入点?。。。于动态链接库avcodec-56.dll(如图)

解决办法:修改工程属性可以解决这个问题。打开工程属性页-》配置属性-》链接项目-》优化,有个“引用”项,选择否(/OPT:NOREF)即可,截图如下:

在MSDN上查找/OPT(优化)相关信息

REF | NOREF

/OPT:REF 清除从未引用的函数和数据;

/OPT:NOREF 保留从未引用的函数和数据。

如果想要进一步了解,可参考网站:https://blog.csdn.net/Solomon1558/article/details/45582249

问题五:在VS2010编译过程中,出现如下错误: error C2001: 常量中有换行符(如图)

解决办法:出现上述问题主要是文件编码的问题。查看项目的编码格式为“UTF-8 无签名”(如图)

将其修改为“UTF-8 带签名”(如图)即可解决上述问题。

参考网址:https://blog.csdn.net/caroline_wendy/article/details/13169837

 

问题六:error LNK2019: 无法解析的外部符号 WinMain,该符号在函数 "int __cdecl invoke_main(void)”中被引用 

一,问题描述 
MSVCRTD.lib(exe_winmain.obj) : error LNK2019: 无法解析的外部符号 WinMain,该符号在函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中被引用
CamShift.exe : fatal error LNK1120: 1 个无法解析的外部命令

error LNK2001: unresolved external symbol _WinMain
debug/main.exe:fatal error LNK 1120:1 unresolved externals 
error executing link.exe;

二,原因及解决办法 
产生这个问题的真正原因是c语言运行时找不到适当的程序入口函数,

一般情况下,如果是windows程序,那么WinMain是入口函数,在VS2017中新建项目为“win32项目”

如果是dos控制台程序,那么main是入口函数,在VS2017中新建项目为“win32控制台应用程序”

而如果入口函数指定不当,很显然c语言运行时找不到配合函数,它就会报告错误。

修改设置适应你的需求

如果是windows程序:

1.菜单中选择 Project->Properties, 弹出Property Pages窗口

2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_CONSOLE, 添加_WINDOWS.

3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为Windows(/SUBSYSTEM:WINDOWS)

如果是控制台程序:

1.菜单中选择 Project->Properties, 弹出Property Pages窗口

2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_WINDOWS, 添加_CONSOLE.

3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为CONSOLE(/SUBSYSTEM:CONSOLE)

参考网址:https://www.cnblogs.com/leijiangtao/p/4496355.html

问题七:

1>MSVCRT.lib(exe_winmain.obj) : error LNK2001: 无法解析的外部符号 WinMain
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(638,5): error MSB6006: “link.exe”已退出,代码为 1120。

建项目是用的是VS2015下的Win 32项目,编译时出现上述错误。

拟采用的解决办法:项目->属性->配置属性->连接器->系统中的【子系统】设置为  控制台 (/SUBSYSTEM:CONSOLE)。

不同的项目或软件需要修改的配置也不尽相同,可以参照进行尝试。

 

展开阅读全文

没有更多推荐了,返回首页