win7 VC++ 环境下运行C语言出现如下错误

Compiling...
1.cpp
Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/3.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
3.exe - 1 error(s), 0 warning(s)

这个问题我也经常遇到,给你一个好的解决方法。
 以下是可能产生LNK2001错误的原因:

  一.由于编码错误导致的LNK2001

  1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如, 如果在C++源文件内声明了一变量“var1”,却试图在另一文件内以变量“VAR1”访问该变量,将发生该错误。

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

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

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

  5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。

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

C++ 的全局常量只有静态连接性能。这不同于C,如果试图在C++的多个文件内使用全局变量也会产生LNK2001错误。一种解决的方法是需要时在头文件中加入该常量的初始化代码,并在.CPP文件中包含该头文件;另一种方法是使用时给该变量赋以常数。

  二.由于编译和链接的设置而造成的LNK2001

  1.如果编译时使用的是/NOD(/NODEFAULTLIB)选项,程序所需要的运行库和MFC库在连接时由编译器写入目标文件模块, 但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。在这种情况下使用/NOD将导致错误LNK2001。

  2.如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将得到“unresolved external on _WinMain@16”的LNK2001错误信息。

  3.使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func” 的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行连接,将在__imp__func上发生LNK2001;如果不使用/MD选项编
  译,在使用MSVCxx.LIB连接时也会发生LNK2001。

  4.使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001。

  5.当编译调试版的应用程序时,如果采用发行版模态库进行连接也会产生LNK2001;同样,使用调试版模态库连接发行版应用程序时也会产生相同的问题。

  6.不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。

  编程时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字),这时将得到该错误信息。为避免该问题的发生,应该在相应的头文件中用inline关键字标志内联函数。

  8.不正确的/SUBSYSTEM或/ENTRY设置也能导致LNK2001。

解决方法:

解决外部符号错误:_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@
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@
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@控制台项目要使用Console子系统, 而不是Windows, 设置:

[Project] --> [Settings] --> 选择"Link"属性页

3. 程序入口设置错误, 提示:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@通常, 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
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-14
这是编译问题, 可以双击VC提示信息栏里面的条目定位到出错的代码行,这样才能帮助分析,因为如果只有错误信息还不能确定问题!
第2个回答  2012-11-14
安装包的问题,可能不是正版!
一个错误是指的你编程语言中存在错误!
第3个回答  2012-11-14
你选的是MFC应用程序或者Windows应用 不是控制台应用程序....重新新建一个工程,选择控制台应用程序就好了本回答被提问者采纳

为什么我的C++程序在Win7下运行不了?
出现这个问题应该是因为该模块没有包括预编译头文件“stdafx.h”的缘故,在VC中是用一个stdafx.cpp包含头文件stdafx.h,然后在stdafx.h里包含大部分系统头文件,这样编译时VC就通过编译stdafx.cpp把大部分系统头文件预编译进来了,在Debug目录下有 一个很大的文件*.pch,这里就存储了预编译信息,如果PCH...

在win7环境下,无法正常运行VC++6.0,使用指针的时候总是出现问题,请问是 ...
可能由于路径设置的问题引起的,“CL.exe”是VC使用真正的编译器(编译程序),其路径在“VC根目录\\VC98\\Bin”下面,你可以到相应的路径下找到这个应用程序。因此问题可以依照以下方式解决:打开vc界面 点击VC“TOOLS(工具)”—>“Option(选择)” —>“Directories(目录)”重新设置“Excutable Fils...

vc++编译程序不能运行怎么解决,显示如下,系统为win7旗舰版
头文件应该是:stdio或者是stdio.h才对。另外还有一个小提示,楼主用的VC++6.0在一些功能上可能在Win7旗舰版里面有兼容性问题,这个是要注意下的!建议楼主使用VC++2008版本的编译器,语法也和VC++6.0兼容,相比功能也更强大!

win7系统下运行VC++6.0时一直提示运行不了,编译时一直出现乱码,请前 ...
安装时不要装组件OLE View就可以在win7下运行了,话说在win7下还是推荐装vs2010sp1,再下个“VS2010跨多版本”,就是不转换工程也没问题。

win7系统安装VC++6.0,运行时总是出现“Error spawning cl.exe...
因此问题可以按照以下方法解决:打开vc界面 点击VC“TOOLS(工具)”—> “Option(选择)”—> “Directories(目录)”重新设置“Excutable Fils、Include Files、Library Files、Source Files”的路径。很多情况可能就一个盘符的不同 (例如你的VC装在C,但是这些路径全部在D),改过来就...

win7 64位 vc++6.0(Visual C++) 不能打开c文件怎么回事?打开时问题事 ...
您应该是在安装之前已经装了office7或者office10等等,它和vc6.0有一个文件时冲突的!若是这样的话:解决办法如下:第一步:先卸载你电脑上的office产品;第二步:安装vc6.0; 第三步:安装office产品;至于什么原因我就不解释了!

vc 6.0里做C语言编程老是出现Error spawning cl.exe编译不出来 我是wi...
该变四个文件的路径,即是"executable files","include files","library files","source files"(下面的也是借鉴的别人的)executatble files:C:\\Program Files\\Microsoft Visual Studio\\Common\\MSDev98\\Bin C:\\Program Files\\Microsoft Visual Studio\\VC98\\BIN C:\\Program Files\\Microsoft Visual Studio\\...

VC++运行时出现错误:Unhandled exception in MSDEV.EXE(NTDLL.DLL):0...
设置--->常规--->Microsoft基础类(使用MFC作为静态链接库) 即可解决。

为什么VC++运行环境安装失败,每次都是错误1935
可能是系统本身有问题造成的。直接换个验证过的系统盘重装系统就行了,这样就可以全程自动、顺利解决 win7系统中软件运行错误 的问题了。用u盘或者硬盘这些都是可以的,且安装速度非常快。但关键是:要有兼容性好的(兼容ide、achi、Raid模式的安装)并能自动永久激活的、能够自动安装机器硬件驱动...

Win7系统运行程序出现并行配置不正确怎么办
1、检查自己的操作系统之中是否正确安装了visual c++运行时环境,如果你使用的是ghost win8操作系统并且出现了上述错误的话,这几乎可以肯定是因为vc++运行时环境缺少导致的。2、启用Windows Modules Installer服务也可以解决一部分在win7系统出现的并行配置错误问题。1)首先打开运行对话框,在其中输入serives...

相似回答