2011-04-16 40 views
1

我在Visual Studio 2010中構建了一個名爲ITPP的開源C++庫。它的構建成功,因此我嘗試構建測試程序隨它一起來嘗試。我在測試程序中發現鏈接錯誤,說我建的第一個庫有一些鏈接錯誤,因爲它找不到某些函數。C++項目編譯和鏈接瓦特/丟失庫

我想我知道什麼庫缺少,但它就像VS不在乎。

什麼是可能的原因,當我直接建立它的庫鏈接正確,但是當我嘗試在某處使用它時,IDE說我創建的lib有鏈接錯誤?

感謝,

MJ

+2

.lib沒有鏈接,它只是一包.obj文件。 – 2011-04-16 13:58:15

+1

我正在Windows 7上編譯項目,所以我在Linux上嘗試了它。這就是它:)。 – 2011-04-18 17:18:44

回答

2
  1. 有測試程序設置上正確的lib的依賴?您是否已將您的新庫所在的目錄添加到Visual Studios搜索路徑中? (工具 - >選項 - >項目和解決方案 - > VC++目錄)。測試應用程序在鏈接器「其他依賴項」選項下列出lib(檢查項目屬性 - >鏈接器 - >輸入 - >附加依賴項)。或者,如果測試應用程序在相同的解決方案中,則在測試應用程序的「項目依賴項」下,是依賴項下列出的lib項目。

  2. .lib是一個導入lib到dll嗎?導入庫僅僅是一個dll的前端。它會導致你的dll/exe在啓動時自動加載dll,並在退出時取消dll。它還爲dll中的所有符號提供靜態前端。可能發生的問題包括如果dll中的符號未導出,因此未放置在導入庫中,導致鏈接器錯誤。

  3. 在visual studio中,.lib的舊版本與您的測試exe坐在相同的路徑中。當我在我的項目中找到.lib文件時,這種情況就會發生在我身上,並且我已將其設置爲複製到某個位置,在該位置我的所有公共庫都存在於多個項目中。有時我會在測試應用程序的相同解決方案中構建.libs項目。其他時候我會在測試應用程序之外構建它。當您在解決方案中構建它時,lib將被複制到與您的測試可執行文件相同的目錄中。這首先在鏈接期間的lib搜索路徑中。

  4. 在鏈接器的搜索路徑的其他地方是否存在舊版本的lib?和上面3中一樣,事情可能發生在這裏。

  5. 如果一切都失敗打開詳細鏈接如指示here。查看視覺工作室從哪裏導入庫,看看它是否符合你的期望。

2

即使其中引用的某些符號(函數/變量)不可用,也會生成一個靜態庫。當您嘗試構建DLL或EXE時,,然後必須提供所有引用的符號 - 因此,您得到的錯誤表明這些符號確實缺失,並且您的庫或任何其他庫/源都不提供它。