2011-07-11 50 views
2

我是Visual Studio 2010環境中的新手。我有一個使用Visual Studio 2008開發的源代碼庫。我試圖在VS 2010中構建它;但構建失敗,因爲鏈接器說錯誤 - LINK:致命錯誤LNK1181:無法打開輸入文件X.lib'。Dll項目不會建立爲鏈接程序無法找到相同的名爲.lib文件

這裏X是從同一個項目創建的lib文件的名稱,X.dll是輸出的dll。事實上,X.lib不在該項目中。如果沒有成功地構建項目,那麼Dll將無法成功構建。我怎樣才能解決這種「僵局」的情況?

由於提前,

石咀

+0

您的描述不清楚。 X是一個在您的解決方案中的項目以及另一個使用X的項目嗎?如果是這樣,爲什麼你不能只建立X項目?如果沒有,請進一步描述您的解決方案中的項目... – eran

+0

嗨,項目X在我的解決方案中。該解決方案還有另外幾個項目。項目X使用由其他項目生成的Dll。那部分很好。問題在於,我對該解決方案進行了清理並刪除了發佈文件夾中存在的X.lib文件。稍後當項目X構建時,它應該創建X.dll。但它被提到有一個「X.lib」的輸入依賴關係,它不存在於解決方案中。這個X.lib只會在項目X的成功構建之後才被創建?所以我認爲這種情況類似於「僵局」。 –

回答

1

我也有這個問題。將正在運行的VS2008項目轉換爲VS2010時,VS2010項目中的鏈接階段會出現相同的錯誤。它試圖鏈接該項目應該構建的.lib!

我發現我的問題的來源:該項目有一個自定義構建步驟發生在構建結束,在PostBuildEvent之前。此自定義構建步驟將$(OutDir)中的.dll,.lib和.pdb複製到外部位置。

自定義生成步驟的輸出目錄設置爲完整路徑複製.dll文件,.LIB和.PDB,如:

C:/a_new_location/myproject.dll; 
C:/a_new_location/myproject.lib; 
C:/a_new_location/myproject.pdb. 

我發現,每當這個輸出列表中包括的.lib那.lib被添加到鏈接階段鏈接的文件列表中。因此,與上述輸出列表,鏈接階段將有一個文件列表:

myprojectfile1.obj 
myprojectfile2.obj 
C:/a_new_location/myproject.lib 

而這會導致鏈接失敗:

LINK : fatal error LNK1181: cannot open input file 'C:\a_new_location\G4SrcCfgLib.lib' 

不要緊,如果自定義生成的副本步驟實際上是複製文件或不。重要的是輸出列表包含.lib。所以,我通過從輸出列表中刪除.lib來解決問題。這樣做的缺點是做一個Clean構建不會清理C:/ a_new_location/lib。但至少它建立了。

相關問題