連結問題(VC6)

Link issues (VC6)

來源: link 標籤:c++visual-c++linkervc6 更新時間:

  問題

我已經打開了一個libray及其測試工具的舊工作區.它過去工作正常,但現在不起作用,舊版本的程式碼也不起作用,也有相同的錯誤.我已經嘗試重新建立專案,這也會導致相同的錯誤.在專案設定中似乎沒有任何錯誤,生成的程式碼在主應用程式中工作.

我已經刪除了大多數檔案,並將其降低到生成錯誤的最低限度.不幸的是,我無法釋出專案,因為這在生產程式碼中使用.

我通常得到的LNK2001連結器錯誤意味著我已經離開庫或忘記實現虛擬函式.但這是標準模板庫的一部分 – 並且是標題.

列為在IOCompletionPort.obj中遇到問題的程式碼實際上並不直接使用std::string,但是呼叫的類是:Comms::Exception接受std::stringGetLastErrorWSAGetLastError的值.

錯誤中提到的函式(GetMessage)已經實現,但是是是一個虛擬函式,所以其他類可以在需要時覆蓋它.但是,似乎編譯器已經將其作為Ansi版本,但我在可以控制的設定中找不到任何選項.我懷疑這可能是問題,但由於庫的選項方法很少,我無法確定.但是,在編譯器選項中指定_MBCS的兩個專案.

------------------------------------------------------------------------------------------------------------------------------------- * 錯誤LNK2001:未解決的外部符號"公共:虛擬類 STD :: basic_string,類 std :: allocator>__thiscall 逗號:: exception:: GetMessageA(void)const“(? [email protected] [email protected]@@UBE? [email protected][email protected]@[email protected][email protected]@[email protected]@[email protected]) 除錯/ TestComms.exe:致命錯誤LNK1120:1個未解決的外部 執行link.exe的錯誤.

TestComms.exe – 2個錯誤,0個警告

有什麼建議嗎?我今天早上大部分時間都失去了,也不想損失下午的大部分時間。

  最佳答案

一種可能性在於Win32 ANSI / Unicode“name-manswing”,它將符號GetMessage轉換為GetMessageAGetMessageW.有三種可能性:

  1. javascript – windows.h沒有載入,所以GetMessage保持GetMessage

  2. javascript – windows.h載入了為ANSI設定的符號,所以GetMessage變成GetMessageA

  3. windows.h載入了Unicode的符號集,所以GetMessage變成GetMessageW

如果您以觸發兩種不同場景的方式編譯了兩個不同的檔案,那麼您將會收到連結器錯誤.錯誤訊息表明Comms::Exception類是上面#2的例項 – 也許它在沒有載入windows.h的某個地方使用?

我在你的地方做的其他事情,就像一個例行事項一樣:

1)確保我的include和庫路徑不包含我不期望的任何內容.

2)做一個“構建乾淨”,然後手動驗證,必要時刪除任何額外的物件檔案。

3)確保在包含語句中沒有任何硬編碼路徑,這並不意味著當專案最初重建時它們意味著什麼.

編輯:與格式鬥爭:(

  相同標籤的其他問題

c++visual-c++linkervc6