第一篇:“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”就可以了。