用VC编程出现好多错误,说是执行CL.EXE时出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用VC编程出现好多错误,说是执行CL.EXE时出错相关的知识,希望对你有一定的参考价值。

不明白什么错误
c:\microsoft visual studio\vc98\include\iostream.h(50) : error C2501: 'streampos' : missing storage-class or type specifiers
c:\microsoft visual studio\vc98\include\streamb.h(65) : error C2378: 'streampos' : redefinition; symbol cannot be overloaded with a typedef
c:\microsoft visual studio\vc98\include\iostream.h(50) : see declaration of 'streampos'
c:\microsoft visual studio\vc98\include\streamb.h(90) : error C2146: syntax error : missing ';' before identifier 'seekoff'
c:\microsoft visual studio\vc98\include\streamb.h(90) : error C2433: 'streampos' : 'virtual' not permitted on data declarations
c:\microsoft visual studio\vc98\include\streamb.h(90) : error C2501: 'streampos' : missing storage-class or type specifiers
c:\microsoft visual studio\vc98\include\streamb.h(91) : error C2146: syntax error : missing ';' before identifier 'seekpos'
c:\microsoft visual studio\vc98\include\streamb.h(91) : error C2433: 'streampos' : 'virtual' not permitted on data declarations
c:\microsoft visual studio\vc98\include\streamb.h(91) : error C2501: 'streampos' : missing storage-class or type specifiers
c:\microsoft visual studio\vc98\include\streamb.h(91) : error C2061: syntax error : identifier 'streampos'
c:\microsoft visual studio\vc98\include\istream.h(62) : error
执行 cl.exe 时出错.

参考一下vc的常见错误吧。
最近在看《深入浅出MFC》,书中候先生所有的程序都是利用makefile进行编译与连接的,我想直接利用VC++6.0进行编译与连接,下面的是书中第六章hello程序的连接时的错误,请各位帮忙看看!
--------------------Configuration: HELLO - Win32 Debug--------------------
Linking...
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/HELLO.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
Creating browse info file...

HELLO.exe - 3 error(s), 0 warning(s)

程序设计到多线程,VC++6.0默认设置可作以下修改:

project->settings->C/C++->Category中选Code Generation->Use Run-time Library选Debug MultiThreaded或MultiThreaded

在创建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] --> 选择"C/C++"属性页,
在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版本: 调试阶段使用
参考技术A cl.exe是编译器。报这个错说明程序代码存在错误,导致编译器执行出错,试着根据前面的出错提示找到出错原因,修正后就可以通过编译了。

比如,你的第一句话,是说没有"streampos"这个类或者类型,说明你没定义这个类,或者哪里写错了,你就顺着去找一下。

missing ';' before identifier 'seekoff' 是说你seekoff前少写了个分号

你大部分错事关于 “streampos”的,你好好检查一下这个是不是用错了。

出现编译错误的时候好好检查代码中的具体错误,好好读报错定位错误就是了。
参考技术B 可能是定义的数据类型streampos,未找到! 参考技术C 错误就跟英文上的提示一样的。。。源程序都没有怎么指出错误啊?
不过建议楼主想要学好编程最好自己慢慢摸索,或者问同学或者老师,网上问别人不容易找到正确解决办法的

使用 VC++ 2008 Express 进行 ATL 开发

【中文标题】使用 VC++ 2008 Express 进行 ATL 开发【英文标题】:ATL development with VC++ 2008 Express 【发布时间】:2011-09-29 06:49:52 【问题描述】:

我最近安装了 Windows Server 2003 R2 以访问 ATL 头文件和库文件。我已经在 Visual C++ 2008 Express 中设置了包含路径和库路径,以使用 cl.exe 编译 ATL 代码。当我在 VC++ 2008 Express 中编译解决方案时。出现以下错误消息。

d:\programs\psdk windows sever 2003\include\atl\atlbase.h(513) : 警告 C4996: '_vsnprintf': 此函数或变量可能不安全。考虑改用 _vsnprintf_s。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。详细信息请参见在线帮助。 d:\programs\microsoft visual studio 9.0\vc\include\stdio.h(358) :参见“_vsnprintf”的声明 d:\programs\psdk windows sever 2003\include\atl\atlbase.h(537) : 警告 C4996: '_vsnprintf': 此函数或变量可能不安全。考虑改用 _vsnprintf_s。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。详细信息请参见在线帮助。 d:\programs\microsoft visual studio 9.0\vc\include\stdio.h(358) :参见“_vsnprintf”的声明 d:\programs\psdk windows sever 2003\include\atl\atlbase.h(561) : 警告 C4996: '_vsnwprintf': 此函数或变量可能不安全。考虑改用 _vsnwprintf_s。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。详细信息请参见在线帮助。 d:\programs\microsoft visual studio 9.0\vc\include\wchar.h(719) :参见“_vsnwprintf”的声明 d:\programs\psdk windows sever 2003\include\atl\atlbase.h(584) : 警告 C4996: '_vsnwprintf': 此函数或变量可能不安全。考虑改用 _vsnwprintf_s。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。详细信息请参见在线帮助。 d:\programs\microsoft visual studio 9.0\vc\include\wchar.h(719) :参见“_vsnwprintf”的声明 将清单编译到资源... Microsoft (R) Windows (R) 资源编译器版本 6.1.6723.1 版权所有 (C) 微软公司。版权所有。 正在链接... 链接:致命错误 LNK1104:无法打开文件“atlthunk.lib”

任何帮助都值得...

【问题讨论】:

How to add WTL and ATL to visual studio c++ express 2008的可能重复 【参考方案1】:

1.find 'atlthunk.lib' 整个项目, 如果找到'#pragma comment(lib, "atlthunk.lib")',删除它。

2.project setting link -> input->add-on dependency, remove 'atlthunk.lib'.

【讨论】:

这个答案有点晦涩。不是每个阅读这篇文章的人都会理解它的作用以及它如何解决问题也许您可以为后代(和新手用户)解释更多? :)

以上是关于用VC编程出现好多错误,说是执行CL.EXE时出错的主要内容,如果未能解决你的问题,请参考以下文章

VC++6.0执行CL.EXE出错

VC6怎么查找程序具体错在哪行?

执行cl.exe出错

spawning cl.exe

Python 错误:命令 '...\Microsoft Visual Studio 10.0\\VC\\BIN\\cl.exe' 失败,退出状态为 2

VC++命令行操作