2016-12-06 100 views
1

我想我的項目(C++控制檯應用程序)鏈接到外部靜態庫(基本上是.lib文件和.h頭文件),在Visual Studio 2015年C++ - 不能鏈接到靜態庫在VS2015

我添加含有.lib的文件夾的路徑(我創建了一個特定的文件夾,該項目的根文件夾,其中只包含的.lib文件下)​​,根據項目性質,以

  1. 「C/C++ - 常規 - 其他包含目錄」
  2. 「Linker - 常規 - 附加庫目錄」

而且我還添加文件名到‘鏈接 - 輸入 - 附加依賴’。 作爲一個測試,我試圖指定錯誤的文件名 - 這導致了LNK1104錯誤(當指定正確的名稱時不會發生)。

出於某種原因,我曾經#include庫的頭(.h文件)到我main.cpp文件,「系統錯誤」 accures -

的計劃,因爲external_dll.dll丟失無法啓動從您的計算機[..]

出於某種原因,鏈接器尋找一個.dll文件的基礎上,#include d頭的名稱 - 儘管我的鏈接項目與統計ic庫(.lib文件)。

這個.dll文件當然不存在。

我在這裏錯過了什麼嗎?

+0

你能寫出庫的名字嗎? –

回答

0

您的應用程序無法找到該DLL文件。最簡單的解決方案是將該DLL與您的exe文件放入該文件夾。

+0

沒有DLL - 這就是整個問題。閱讀問題。 – golosovsky

+0

顯然,靜態庫只是靜態鏈接你的應用程序與你的情況下的一些DLL。 http://stackoverflow.com/questions/424032/how-to-link-a-dll-statically –

+1

@golosovsky - 你絕對確定_不應該是一個DLL? **許多基於DLL的庫都帶有.h(用於編譯時),.lib(用於鏈接時)和.dll(用於運行時)。在這些情況下,H和LIB通常是一個簡單的包裝器,用於加載DLL並執行任何必要的獲取proc地址內容以及處理任何ABI問題 - 但在運行時仍需要DLL。 –

1

如果folllowing是這樣的: -

「出於某種原因,鏈接器查找一個.dll文件的基礎上,包含(#include)頭的名稱 - 儘管我已經聯繫與項目靜態庫(.lib文件)「。

然後應該有一些方法來禁用這個功能,我的意思是在VS2015的項目設置中,應該可以讓鏈接器停止查找對應於dll #include頭文件的dll文件。

此外,還有排除字段,如果你不能做到上述,你可以嘗試排除你遇到的dll文件,然後從那裏採取。