VC编译错误处理

1. 使用VC2008调试时弹出没有找到mfc90ud.dll,因此这个应用程序未能启动.重新安装应用程序可能会修复此

方法: 项目属性->配置属性->链接器->调试->生成映射文件 选择 Yes (/MAP)


2. error C2471: 无法更新程序数据库“d:\Work\ Project\FBReader\debug\vc90.pdb”

解决方案:修改项目属性 右击项目 --> "属性”

1. “C/C++” --> "常规” -->”调试信息格式” 设置为 “C7 兼容(/Z7)”

2. “C/C++” --> "代码生成” -->”启用字符串池” 设置为 “是(/GF)”

3. “链接器” --> "调试” -->”生成调试信息” 设置为 “是(/DEBUG)”


3. error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup

Go to "Linker settings -> System". Change the field "Subsystem" from "Windows" to "Console". Done.


4. CVTRES : fatal error CVT1100: duplicate resource. type:MANIFEST, name:1, language:0x0409【错误解决方法】

描述:Visual Studio 2003.NET转化为2005时所遇到的错误使得无法运行。

解决:找到解决方案下的rc文件,用记事本打开,注释掉含有manifest所在行,重新编译即可。

如://1                       RT_MANIFEST             "SimpleSample.manifest"


5. 错误提示:XML 分析: 行 1,字符 38,无法切换编码 .

需要把xml存入数据库,在数据库中建立了xml类型的列后,使用程序将xml作为参数存入库时,出现了错误:XML 分析: 行 1,字符 38,无法切换编码。经过网上查找资料,找到解决方案:将<?xml version="1.0" encoding="utf-8"?>去掉后即可插入

直接删掉第一行


6. error LNK2026: module unsafe for SAFESEH image.

Linker->Advanced->Image has safe exception handlers:改为No(/SAFESEH:NO)


7. 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用(转)

LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用 MSVCRTD.lib test

参考了以下方法

以下为转载

一,问题描述

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, 添加_WINDOWS

2.进入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 ?


8. error C3389:__declspec(dllexport) 不能与 /clr:pure 或 /clr:safe 一起使用

  解决方法:

  1、菜单“项目”--〉“XXXX属性”

  2、“配置属性”--〉“常规”---〉“公共语言运行库支持”

  3、系统默认“纯 MSIL 公共语言运行库支持(/clr:pure)”改为“公共语言运行库支持(/clr)”或“公共语言运行库支持,原来的语法 (/clr:oldSyntax)”选项即可


9. 使用vs2008编译c文件时,可能遇到出现 inline”之后应输入“(”错误!

解决方案是:在该头文件中加入

#if defined(WIN32) && !defined(__cplusplus)

#define inline __inline

#endif


10. This function or variable may be unsafe

在该文件上右击,在 processor 中添加 _CRT_SECURE_NO_WARNINGS


11. Building an MFC project for a non-Unicode character set is deprecated

下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=40770


12. error C2054: expected '(' to follow 'inline'  

不用改代码,直接改project->[setting]->[c/c++]->Preprocessor definitions:编辑框里输入inline=__inline即可。


13. LINK:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

错误描述:

1>正在编译资源...

1>正在编译资源清单...

1>正在链接...

1>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

1>生成日志保存在“file://E:\HelloC\ShapeFill V11\ShapeFill\Debug\ShapeFill.log”

1>ShapeFill- 1个错误,0个警告

========== 全部重新生成: 0 已成功, 1 已失败, 0 已跳过 ==========

解决方案:

 第一步:将 项目——项目属性——配置属性——连接器——清单文件——嵌入清单 “是”改为“否”。若还不能解决问题进入第二步。

第二步:查看计算机是否为64bit操作系统,如是,继续如下操作。

查找是否有两个cvtres.exe。

C:\Program Files(x86)\Microsoft Visual Studio 10.0\vc\bin\cvtres.exe

C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe

右键属性—详细信息, 查看两者版本号,删除/重命名较旧的版本,或者重新设置Path变量。


治本的办法是第二步,删除旧版本的cvtres.exe后,就不需要每次都设置配置了。

14. fatal error C1189: #error : The C++ Standard Library forbids macroizing keywords. Enable warning C4005 to find the forbidden macro.

最近在使用 VS2015 编译以前用VS2008的项目的时候,提示错误:fatal error C1189: #error :  The C++ Standard Library forbids macroizing keywords. Enable warning C4005 to find the forbidden macro.

解决方法:在项目的“预处理器定义”中增加 "_XKEYCHECK_H"


15. CVTRES : fatal error CVT1100: 资源重复。类型: MANIFEST,名称: 1,语言: 0x0409

LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

fatal error CVT1100: 重复的资源。type:MANIFEST, name:1, language:0x0409 CVTRES 

在资源视图中删除RT_MANIFEST资源。

项目——属性——清单工具,嵌入清单——否


16. error MSB8020: The build tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found. To build using the v100 build tools, please install Visual Studio 2010 build tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Upgrade Solution...".    C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets    64    5    TerrainDemo

error msb8020 :the builds tools for...

也就是 VS2013 去编译 VS2010 

右击工程,提升工程


17. error RC2108: expected numerical dialog constant

PictureControl 需要显示图片,则需要把 Type 改成 Bitmap

CONTROL         "",IDC_VIDEOTHUMB,27,103,11,9,NOT WS_GROUP

改成:

CONTROL         "",IDC_VIDEOTHUMB,"STATIC", SS_BITMAP, 27,103,11,9,NOT WS_GROUP


18. RC 在另一个文件中打开

在 VC 中关闭所有的页面


19. error LNK2026: 模块对于 SAFESEH 映像是不安全的

解决方法:

1.打开该项目的“属性页”对话框。

2.单击“链接器”文件夹。

3.单击“命令行”属性页。

4.将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用。


20. VS2010 解决链接错误:error LNK2019: 无法解析的外部符号 __iob  

该错误主要是由于静态库在VC6编译而主程序在VC2010编译,大家用的CRT不同。解决办法,代码中增加

#ifdef __cplusplus

extern "C" 

#endif

FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]};

此错误的产生根源:

在VC6的stdio.h之中有如下定义

_CRTIMP extern FILE _iob[];

#define stdin (&_iob[0])

#define stdout (&_iob[1])

#define stderr (&_iob[2])

stdin、stdout、stderr是通过查_iob数组得到的。所以,VC6编译的程序、静态库只要用到了printf、scanf之类的函数,都要链接_iob数组。

而在vc2010中,stdio.h中变成了

_CRTIMP FILE * __cdecl __iob_func(void);

#define stdin (&__iob_func()[0])

#define stdout (&__iob_func()[1])

#define stderr (&__iob_func()[2])

_iob数组不再是显式的暴露出来了,需要调用__iob_func()函数获得。所以vc6的静态库链接VC2010的C运行库就会找不到_iob数组.

通过重新定义

FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]};

就把vc6需要用到的_iob数组搞出来了


21. 创建其他对象所用编译器旧的编译器创建的;请重新生成旧的对象和库-问题解决

解决办法:Release模式下->属性->常规->项目默认值->全程序优化  将这里的默认项 “使用链接时间代码生成”改为“无全程序优化,  接下来就可以运行了。 


22. 默认库“msvcrtd.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

警告信息如下:

1>LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

原因:

在使用多线程调试dll(MDd)模式的时候 <位置:配置属性 - c/c++ - 代码生成-运行时库>

msvcrtd.lib 与 ibcmt.lib产生冲突

解决方法有2个:

1.右击工程 - 属性 ”配置属性 - 链接器 - 输入 - 忽略特定库“,添加 ”libcmt.lib“

2.右击工程 - 属性 ”配置属性 - 链接器 - 命令行” 添加:  /NODEFAULTLIB:"libcmt.lib"


23. error C1128: 节数超过对象文件格式限制: 请使用 /bigobj 进行编译

单击“C/C++”项。

单击“命令行”属性页。

在“附加选项”框中键入编译器选项,添加/bigobj。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容