第一篇:“ODBC驱动程序不支持动态记录集”错误的解决 .
在使用VC进行数据库编程时我遇到一个问题。代码编译通过,在运行时突然弹出一个警告对话框,如下图:
我纳闷在哪里出了问题。我想唯一有可能的是连接数据库时出现了问题。于是我找到连接数据库的代码:
m_pdatabase->Open(NULL,FALSE,FALSE,“ODBC;DSN=libraryMIS;UID=txm;PWD=txm”);
其中m_pdatabase是一个CDatabase类的指针。于是我查msdn,找到CDatabase的Open函数。CDatabase::Open
virtual BOOL Open(LPCTSTR lpszDSN, BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = “ODBC;”, BOOL bUseCursorLib = TRUE);
throw(CDBException, CMemoryException);
我猜到问题可能出在哪儿了,我在BOOL bUseCursorLib设置了默认值TRUE。我得先看看bUseCursorLib表示什么意义。bUseCursorLib
TRUE if you want the ODBC Cursor Library DLL to be loaded.The cursor library masks some functionality of the underlying ODBC driver, effectively preventing the use of dynasets(if the driver supports them).The only cursors supported if the cursor library is loaded are static
snapshots and forward-only cursors.The default value is TRUE.If you plan to create a recordset object directly from CRecordset without deriving from it, you should not load the cursor library.大意是说假如bUseCursorLib为TRUE时,ODBC光标库将被加载。光标库会覆盖ODBC驱动程序的一些功能,有效地阻止动态记录集的使用(假如ODBC驱动程序支持动态记录集的使用的话)。假如光标库被加载唯一的光标支持的是静态快照集和唯一向前的光标。参数默认值是TRUE。假如你直接创建一个CRecordset类对象而不是继承自它,你不应该装载光标库。
因此问题的解决办法是将bUseCursorLib的值设为FALSE。当我这样做了,问题解决了。
第二篇:怎样解决iexplore.exe应用程序错误
作者:江西新华电脑学院
怎样解决iexplore.exe应用程序错误
最近观察到有很多用户上网时,系统经常报错:iexplore.exe-应用程序错误。分析了常见iexplore.exe 应用程序错误的原因后,发现主要是病毒木马影响,其次是浏览器加载项。
iexplore.exe应用程序错误的现象:浏览器是上网的最主要通道。目前,使用IE浏览器的人仍然是主流,国内流行的第三方浏览器也大多是IE内核。任何原因导致IE出错,都会导致上网浏览障碍。
比如很多网民浏览器频繁崩溃时会问:
(1)iexplore.exe应用程序错误
(2)iexplore.exe是什么进程可以结束吗
(3)iexplore.exe 遇到问题需要关闭
(4)iexplore.exe是什么进程
而浏览器崩溃时出错的提示往往是“iexplore.exe 应用程序错误”,“0x02e87a90”指令引用的“0x02e87a90”内存.该内存不能为“read”等等。
iexplore.exe应用程序错误的原因:情况主要有以下几种:
1:iexplore.exe会经常被病毒假冒或者病毒直接插入iexplore.exe进程,病毒木马程序的BUG会经常导致iexplore.exe应用程序错误。但显然,病毒木马作者会无视这一点。
2:病毒木马感染系统文件的过程中,采取了一些非主流的方式加载,这类方式非常不稳定,容易导致iexplore.exe的崩溃,出现iexplore.exe应用程序错误;最常见的也就是出现iexplore.exe 遇到问题需要关闭;
3:具体表现一般为“internet explorer遇到加载项需要关闭,我们对此引起的不便表示道歉.如果你正处于进程中,请提交„„ 等对话框。
4:一般的加载到iexplore.exe的病毒多为盗号木马,主要是针对大型网游和网银进行盗号;还有对淘宝支付宝帐号下手。除此之外,有些病毒木马还是下载器,中毒后,会下载大量其它木马。或者安装不需要的软件,或弹出广告。
5:除病毒之外的原因就是第三方厂商设计的浏览器加载项,一般称之为浏览器插件。插件的BUG,也会导致iexplore.exe应用程序错误。
工具/原料
a:金山毒霸2011
b:控制面板,IE选项
解决iexplore.exe应用程序错误的步骤/方法
方案一:采用金山毒霸最新版本查杀病毒,并修复系统错误。一般情况下不需要全盘查杀,只需要快速查杀,3-5分钟之后,按提示选择修复即可。
方案二:如果金山毒霸最新版本没有检查到病毒,但仍然有iexplore.exe应用程序错误的情况发生,应检查IE加载项。方法是启动控制面板,找到internet选项,高级页,点击管理加载项。将可能有影响的插件禁用。
若管理插件无效,还可以重置或重装IE。
注意事项:
浏览器故障通常是小问题,不要匆匆忙忙重装系统。绝大多数情况下,3-5分钟即可搞定。
2013-4-5
第三篇:VPN客户端创建及错误解决
VPN服务教程
目录
1.客户端创建....................................................................................................................................2
1.1.XP系统下创建...................................................................................................................2 1.2.Windows7系统下创建.......................................................................................................7 1.3.Windows8系统下创建.....................................................................................................12 1.4.静态IP地址/DNS设置....................................................................................................16 2.VPN服务错误解决方法..............................................................................................................19 2.1.错误868:服务器名称问题.........................................................................................19 2.2.无法使用提供的用户名和密码进行连接错误...............................................................20 2.3错误691:远程服务器不可达或饱和或断开连接和错误1168:找不到元素...........20
1.客户端创建
1.1.XP系统下创建
(1)打开“开始菜单栏”,单击“控制面板”
(2)找到并双击“网络连接”
(3)进入界面后,按照图示单击或双击红色提示框部分即可
(4)返回桌面,找到并双击桌面上的“VPN连接”客户端,输入获得的账号密码。
(5)点击上图当中的“属性”按钮,切换到安全选项卡,如下图设置,点击确定
(6)返回(4)中的的界面,输入正确的账号密码后点击“连接”按钮即可。
1.2.Windows7系统下创建
(1)打开“开始菜单”栏,找到并右键单击”网络”,选择右键菜单中的”属性”
(2)按下图设置
(3)创建桌面快捷方式:重复(1)对照下图操作
(4)设置VPN参数:如账号、密码、连接类型等。在桌面找到刚创建的“SONTA_VPN”快捷方式,并双击。
b
(5)点击上图当中的“属性”按钮,切换到安全选项卡,如下图设置,点击确定
(6)返回(4)中的的界面,输入正确的账号密码后点击“连接”按钮即可。1.3.Windows8系统下创建
(1)找到系统“控制面板”
(2)点击下图中“查看网络状态和任务”
(3)然后按照下图中红色选框设置即可
(4)最后输入在vpn.dog25.com注册的账号和密码,如果该账号已成功开通VPN服务,并且客户端属性中的“目的地的主机名或IP地址”填写正确,即可成功连接。
1.4.静态IP地址/DNS设置
由于学校的路由器不是很稳定,经常遭受到局域网病毒攻击,网关不能正常分配IP地址,导致经常发生明明连上网线却连不上电信宽带或者神州数码。此外,学校的DNS服务器,在个人电脑没有联网的情况下,无法解析外网的域名,这就导致了明明联网了,却无法打开网页,但是能上qq的情况。所以为了保证网络通信正常,不受局域网病毒影响,请按照如下图示给个人电脑设置静态IP地址和DNS。
最后点击“确定”按钮即可,至此保证你的网络在别人连不上的情况下,你却能正常上网!
2.VPN服务错误解决方法
2.1.错误868:服务器名称问题
导致该错误的原因可能有两个,第一个是由于如下图中客户端服务器地址没有填对,此时登录vpn.dog25.com 查询到自己的服务器地址设置好vpn客户端即可。
第二个错误是由于自己电脑的DNS没有设置好,此时按照文档的1.4节设置好网卡的DNS即可正常连接了!2.2.无法使用提供的用户名和密码进行连接错误
出现该错误的原因有多种,包括:本身用户名和密码不正确、账户VPN服务未开通、账户VPN服务已到期(流量用完了或到期了)、客户端服务器地址设置不正确。按照如下步骤检查即可。
首先用刚连接VPN的账号和密码登录vpn.dog25.com,如果能登录,则排出第一种可能,否则联系管理员重置登录密码。登录系统后如果首页有提示“VPN服务未开通”,则说明没有开通VPN服务,或者VPN服务已到期,否则就是最后一种可能:客户端服务器地址设置不争取,此时按照上一节错误868中第二个图设置即可!
2.3错误691:远程服务器不可达或饱和或断开连接和错误1168:找不到元素
这个错误一般发生在个人电脑没有连上校内局域网。什么时候说明连上校内局域网了呢?在断开所有的网络服务如电信宽带、chinat、联通宽带、神州数码、VPN等服务之后打开浏览器,如果此时还能访问202.199.155.2,则说明连上校内局域网了,否则就没有,此时连接VPN就会出现691错误。一个可能的解决办法就是将自己的电脑设置静态IP地址,方法在文档中有介绍,在这里不再叙述。
第四篇:小结SQLServer连接失败错误及解决
小结SQL Server连接失败错误及解决
在使用 SQL Server 的过程中,用户遇到的最多的问题莫过于连接失败了。一般而言,有以下两种连接 SQL Server 的方式,一是利用 SQL Server 自带的客户端工具,如企业管理器、查询分析器、事务探查器等;二是利用用户自己开发的客户端程序,如ASP 脚本、VB程序等,客户端程序中又是利用 ODBC 或者 OLE DB 等连接 SQL Server。下面,我们将就这两种连接方式,具体谈谈如何来解决连接失败的问题。
一、客户端工具连接失败
在使用 SQL Server 自带的客户端工具(以企业管理器为例)连接 SQL Server时,最常见的错误有如下一些:
1、SQL Server 不存在或访问被拒绝
ConnectionOpen(Connect())
2、用户'sa'登录失败。原因:未与信任 SQL Server 连接相关联。
3、超时已过期。
下面我们依次介绍如何来解决这三个最常见的连接错误。
第一个错误“SQL Server 不存在或访问被拒绝”通常是最复杂的,错误发生的原因比较多,需要检查的方面也比较多。一般说来,有以下几种可能性:
1、SQL Server名称或IP地址拼写有误;
2、服务器端网络配置有误;
3、客户端网络配置有误。
要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因。
首先,检查网络物理连接:
ping <服务器IP地址>
或者
ping <服务器名称>
如果 ping <服务器IP地址> 失败,说明物理连接有问题,这时候要检查硬件设备,如网卡、HUB、路由器等。还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如 ISA Server。防火墙软件可能会屏蔽对 ping、telnet 等的响应,因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口。
如果ping <服务器IP地址> 成功而 ping <服务器名称> 失败,则说明名字解析有问题,这时候要检查 DNS 服务是否正常。有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析,具体的方法是:
1、使用记事本打开HOSTS文件(一般情况下位于C:WINNTsystem32driversetc).2、添加一条IP地址与服务器名称的对应记录,如:
172.168.10.24 myserver
也可以在 SQL Server 的客户端网络实用工具里面进行配置,后面会有详细说明。
其次,使用 telnet 命令检查SQL Server服务器工作状态:
telnet <服务器IP地址> 1433
如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明 SQL Server 服务器工作正常,并且正在监听1433端口的 TCP/IP 连接;如果命令返回“无法打开连接”的错误信息,则说明服务器端没有启动 SQL Server 服务,也可能服务器端没启用 TCP/IP 协议,或者服务器端没有在 SQL Server 默认的端口1433上监听。
接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道,是否启用了 TCP/IP 协议等等。我们可以利用 SQL Server 自带的服务器网络使用工具来进行检查。
点击:程序-> Microsoft SQL Server-> 服务器网络使用工具,打开该工具后看到的画面如下图所示:
从这里我们可以看到服务器启用了哪些协议。一般而言,我们启用命名管道以及 TCP/IP 协议。
点中 TCP/IP 协议,选择“属性”,我们可以来检查 SQK Server 服务默认端口的设置,如下图所示:
一般而言,我们使用 SQL Server 默认的1433端口。如果选中“隐藏服务器”,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接。
检查完了服务器端的网络配置,接下来我们要到客户端检查客户端的网络配置。我们同样可以利用 SQL Server 自带的客户端网络使用工具来进行检查,所不同的是这次是在客户端来运行这个工具。
点击:程序-> Microsoft SQL Server-> 客户端网络使用工具,打开该工具后看到的画面如下图所示:
从这里我们可以看到客户端启用了哪些协议。一般而言,我们同样需要启用命名管道以及 TCP/IP 协议。
点击 TCP/IP 协议,选择“属性”,可以检查客户端默认连接端口的设置,如下图所示。
该端口必须与服务器一致。
单击“别名”选项卡,还可以为服务器配置别名。服务器的别名是用来连接的名称,连接参数中的服务器是真正的服务器名称,两者可以相同或不同。如下图中,我们可以使用myserver来代替真正的服务器名称sql2kcn-02,并且使用网络库 Named Pipes。别名的设置与使用HOSTS文件有相似之处。
通过以上几个方面的检查,错误 1 发生的原因基本上可以被排除。下面我们再详细描述如何来解决错误 2。
当用户尝试在查询分析器里面使用sa来连接SQL Server,或者在企业管理器里面使用sa来新建一个SQL Server注册时,经常会遇到如图 2 所示的错误信息。该错误产生的原因是由于SQL Server使用了“仅 Windows”的身份验证方式,因此用户无法使用SQL Server的登录帐户(如 sa)进行连接。解决方法如下所示:
1、在服务器端使用企业管理器,并且选择“使用 Windows 身份验证”连接上 SQL Server;
2、展开“SQL Server组”,鼠标右键点击SQL Server服务器的名称,选择“属性”,再选择“安全性”选项卡;
3、在“身份验证”下,选择“SQL Server和 Windows ”。
4、重新启动SQL Server服务。
在以上解决方法中,如果在第 1 步中使用“使用 Windows 身份验证”连接 SQL Server 失败,那么我们将遇到一个两难的境地:首先,服务器只允许了 Windows 的身份验证;其次,即使使用了 Windows 身份验证仍然无法连接上服务器。这种情形被形象地称之为“自己把自己锁在了门外”,因为无论用何种方式,用户均无法使用进行连接。实际上,我们可以通过修改一个注册表键值来将身份验证方式改为 SQL Server 和 Windows 混合验证,步骤如下所示:
1、点击“开始”-“运行”,输入regedit,回车进入注册表编辑器;
2、依次展开注册表项,浏览到以下注册表键:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerMSSQLServer]
3、在屏幕右方找到名称“LoginMode”,双击编辑双字节值;
4、将原值从1改为2,点击“确定”;
5、关闭注册表编辑器;
6、重新启动SQL Server服务。
此时,用户可以成功地使用sa在企业管理器中新建SQL Server注册,但是仍然无法使用Windows身份验证模式来连接SQL Server。这是因为在 SQL Server 中有两个缺省的登录帐户:BUILTINAdministrators 以及 <机器名>Administrator 被删除。要恢复这两个帐户,可以使用以下的方法:
1、打开企业管理器,展开服务器组,然后展开服务器;
2、展开“安全性”,右击“登录”,然后单击“新建登录”;
3、在“名称”框中,输入 BUILTINAdministrators;
4、在“服务器角色”选项卡中,选择“System Administrators” ;
5、点击“确定”退出;
6、使用同样方法添加 <机器名>Administrator 登录。
以下注册表键
HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerMSSQLServerLoginMode 的值决定了SQL Server将采取何种身份验证模式。该值为1,表示使用Windows 身份验证模式;该值为2,表示使用混合模式(Windows 身份验证和 SQL Server 身份验证)。
看完如何解决前两个错误的方法之后,让我们来看一下如图 3 所示的第三个错误。
如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接,不过是由于连接的时间大于允许的时间而导致出错。这种情况一般会发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器,并且是慢速连接时,有可能会导致以上的超时错误。有些情况下,由于局域网的网络问题,也会导致这样的错误。
要解决这样的错误,可以修改客户端的连接超时设置。默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是 4 秒,而查询分析器是 15 秒(这也是为什么在企业管理器里发生错误的可能性比较大的原因)。具体步骤为:
1、在企业管理器中,选择菜单上的“工具”,再选择“选项”;
2、在弹出的“SQL Server企业管理器属性”窗口中,点击“高级”选项卡;
3、在“连接设置”下的“登录超时(秒)”右边的框中输入一个比较大的数字,如 20。
查询分析器中也可以在同样位置进行设置。
二、应用程序连接失败
以上的三种错误信息都是发生在 SQL Server 自带的客户端工具中,在应用程序中我们也会遇到类似的错误信息,例如:
Microsoft OLE DB Provider for SQL Server(0x80004005)[DBNETLIB][ConnectionOpen(Connect()).]Specified SQL server not found.Microsoft OLE DB Provider for SQL Server(0x80004005)用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'.[Microsoft][ODBC SQL Server Driver]超时已过期.首先,让我们来详细看以下的示意图来了解一下使用 ODBC 和使用 OLE DB 连接 SQL Server 有什么不同之处。
从上图中,我们可以看出在实际使用中,应用程序创建和使用各种 ADO 对象,ADO 对象框架调用享用的 OLE DB 提供者。为了访问 SQL Server 数据库,OLE DB 提供了两种不同的方法:用于 SQL Server 的 OLE DB 提供者以及用于 ODBC 的 OLE DB 提供者。这两种不同的方法对应于两种不同的连接字符串,标准的连接字符串写法如下所示:
1、使用用于 SQL Server 的 OLE DB 提供者:
使用 SQL Server 身份验证:
oConn.Open “Provider=sqloledb;” & _ “Data Source=myServerName;” & _ “Initial Catalog=myDatabaseName;” & _ “User Id=myUsername;” & _ “Password=myPassword”
使用 Windows 身份验证(信任连接): oConn.Open “Provider=sqloledb;” & _ “Data Source=myServerName;” & _ “Initial Catalog=myDatabaseName;” & _ “Integrated Security=SSPI”
2、使用用于 ODBC 的 OLE DB 提供者(不使用 ODBC 数据源):
使用 SQL Server 身份验证:
oConn.Open “Driver={SQL Server};” & _ “Server=MyServerName;” & _ “Database=myDatabaseName;” & _ “Uid=myUsername;” & _ “Pwd=myPassword”
使用 Windows 身份验证(信任连接): oConn.Open “Driver={SQL Server};” & _ “Server=MyServerName;” & _ “Database=myDatabaseName;” & _ “Trusted_Connection=yes”
3、使用用于 ODBC 的 OLE DB 提供者(使用 ODBC 数据源): oConn.Open “DSN=mySystemDSN;” & _ “Uid=myUsername;” & _ “Pwd=myPassword”
如果遇到连接失败的情况,我们只要按照一中所示的方法,结合程序中的连接字符串进行检查,基本都能得到解决。另外,还有以下几个要注意的地方:
1、配置 ODBC 数据源时,点击“客户端”配置选项可以让我们指定连接使用的网络库、端口号等属性,如下图所示:
2、如果遇到连接超时的错误,我们可以在程序中修改 Connection 对象的超时设置,再打开该连接。例如:
<% Set Conn = Server.CreateObject(“ADODB.Connection”)
DSNtest=“DRIVER={SQL Server};SERVER=ServerName;UID=USER;PWD=password;DATABASE=mydatabase” Conn.Properties(“Connect Timeout”)= 15 '以秒为单位
Conn.open DSNtest
%>
3、如果遇到查询超时的错误,我们可以在程序中修改 Recordset 对象的超时设置,再打开结果集。例如:
Dim cn As New ADODB.Connection Dim rs As ADODB.Recordset
...cmd1 = txtQuery.Text Set rs = New ADODB.Recordset rs.Properties(“Command Time Out”)= 300 '同样以秒为单位,如果设置为 0 表示无限制
rs.Open cmd1, cn rs.MoveFirst
...三、小结
本文针对大部分用户在使用 SQL Server 过程中常见的连接失败的错误,重点讨论了在使用 SQL Server 客户端工具以及用户开发的应用程序两种情况下,如何诊断并解决连接失败的错误。看过本文以后,相信每一个读者都会对 SQL Server 的连接工作原理、身份验证方式以及应用程序开发等有一个较为全面而深入的连接。本文中所有的测试或者示例均在 Windows 2000 Advanced Server + SQL Server 2000 企业版上通过。
第五篇:visual studio 6.0 link 2001常见错误解决总结
visual studio 6.0 link 2001常见错误解决总结
第一:
nafxcwd.lib(appcore.obj): error LNK2001: unresolved external symbol ___argv
nafxcwd.lib(appcore.obj): error LNK2001: unresolved external symbol ___argc
nafxcwd.lib(timecore.obj): error LNK2001: unresolved external symbol __mbctype
nafxcwd.lib(apphelp.obj): error LNK2001: unresolved external symbol __mbctype
nafxcwd.lib(filelist.obj): error LNK2001: unresolved external symbol __mbctype
解决办法:
PROJECT->SETING->C/C++->PREPROCESSOR->定义 _AFXDLL
第二:
解决外部符号错误:_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
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 __beginthreadexnafxcwd.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版本: 调试阶段使用
初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:
unresolved external symbol “symbol”(不确定的外部“符号”)。
如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。
以下是可能产生LNK2001错误的原因:
一.由于编码错误导致的LNK200
11.不相匹配的程序代码或模块定义(.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。
LINK : fatal error LNK1117: syntax error in option “subsystem:windows/incremental:yes” 解决方法:删掉incremental:yes
vc编译报错 unresolved external symbol __imp__PlaySoundA@12 解决办法 添加Winmm.lib和 头文件中包含 Mmsystem.h
选择“project”->“setting”->“link”->“Object/librarymodules”然后添加“Winmm.lib”就可以了。