1. 程式人生 > >VS2010:error LNK2019 :無法解析的外部符號

VS2010:error LNK2019 :無法解析的外部符號

最近在研究sumo,前幾天將編譯環境都搭建好了後,自己在解決方案的基礎上新增加了一個專案,但是突然冒出來好多問題,其他都已經通過網路搜尋解決。關於錯誤:error LNK2019 :無法解析的外部符號。網路方法很多,自己按照各種方法測試後依然不能解決。最後想到,和已經編譯好的專案配置一項一項的作對比,來看看到底哪裡出錯了。因為根據錯誤提示,是兩個cpp檔案中的函式定義被引用。

具體錯誤程式碼樣式(樣子都差不多)):

1>------ 已啟動生成: 專案: udt_appserver, 配置: Debug Win32 ------
1>生成啟動時間為 2013/11/11 20:53:08。
1>InitializeBuildStatus:


1>  正在建立“Debug\udt_appserver.unsuccessfulbuild”,因為已指定“AlwaysCreate”。
1>ClCompile:
1>  appserver.cpp
1>ResourceCompile:
1>  所有輸出均為最新。
1>ManifestResourceCompile:
1>  所有輸出均為最新。
1>api.obj : error LNK2019: 無法解析的外部符號 [email protected],該符號在函式 "public: int __thiscall CUDTUnited::startup(void)" (
[email protected]
@@QAEHXZ) 中被引用

1>channel.obj : error LNK2001: 無法解析的外部符號 [email protected]
1>api.obj : error LNK2019: 無法解析的外部符號 [email protected],該符號在函式 "public: int __thiscall CUDTUnited::startup(void)" ([email protected]@@QAEHXZ) 中被引用
1>api.obj : error LNK2019: 無法解析的外部符號 [email protected]
,該符號在函式 "public: int __thiscall CUDTUnited::cleanup(void)" ([email protected]@@QAEHXZ) 中被引用

1>api.obj : error LNK2019: 無法解析的外部符號 [email protected],該符號在函式 "public: int __thiscall CUDTUnited::bind(int,unsigned int)" ([email protected]@@[email protected]) 中被引用
1>F:\C_TEST\test_udt\Debug\udt_appserver.exe : fatal error LNK1120: 20 個無法解析的外部命令
1>
1>生成失敗。
1>
1>已用時間 00:00:01.05
========== 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 ==========

錯誤提示:


按照網上的方法,是標頭檔案和lib檔案缺失。但是自己配置好以後仍然不能解決這個錯誤。

解決方案:

1、檢視是否標頭檔案和lib都已經匯入。(我已經設定正確,仍然有錯,看方法2)

一般這種方法很難達到效果,網上也好多人說,知道這種錯,但是我不知道缺哪種lib啊.....這就尷尬了。

2、檢視是否有引用的其他專案(需要你提前知道他們的引用關係)

我出現這種情況是在一個解決方案中有好多個專案,其中它們之間有相互引用的關係。我新建專案後,使用了以前的引用檔案,但是我沒有設定引用關係。具體方案:

專案右鍵--屬性或者是引用,效果一樣:


然後就是設定相應的引用項,點選新增新引用(N)按鈕進行引用:


設定完以後重新編譯執行。錯誤麼有了。


題外話:

也許你說了,我哪知道他們的引用關係。一般都可以從錯誤提示中看出來的。比如:

TraCIAPI.obj : error LNK2019: 無法解析的外部符號 "public: virtual void __thiscall tcpip::Storage::writeInt(int)" ([email protected]@[email protected]@[email protected]),該符號在函式 "protected: void __thiscall TraCIAPI::send_commandSimulationStep(__int64)const " ([email protected]@@[email protected]) 中被引用

其中的 tcpip::Storage::writeInt(int)和TraCIAPI::send_commandSimulationStep這兩個函式你完全可以去找到的,根據提示提到的檔案和函式,將提到的相關的專案進行引用就可以了。不過一般引起這種錯誤的原因是,你拿著別人的專案在自己的電腦上跑,那麼你可以問一下原作者的引用關係。不過還是自己動手比較快。

error LNK2019 :無法解析的外部符號然後