2012-10-10 210 views
2

有人可以幫我理解這個過程。在C++ visual studio中鏈接靜態庫

在C++中的Visual Studio

我有一個Visual Studio解決方案(可以稱之爲mysol)

我建立一個靜態庫中的項目(我們稱之爲staticprj) staticprj需要使用來自外部的庫(讓我們稱之爲ext.lib)

在staticprj源代碼的主體中,我包含外部庫頭文件 #include extlib.h並調用其某些函數(讓它們調用函數()) 我也包括了路徑到ext.lib的頭文件位置。

的staticprj編譯沒有錯誤

沒關係的mysol還有另一個項目是一個動態庫(dynprj),並依賴於staticprj。

也在dynprj的源文件中使用外部庫中的函數。

我在dynprj的源代碼中包含了#include extlib.h。 我已經包含頭文件的路徑 我已經將extlib.h直接附加到dynprj 我還將ext.lib添加到鏈接器輸入(以及ext.lib所在的路徑)。

我仍然得到一個lnk2001錯誤,指出extfunctions()哪裏找不到。

整個結構(mysol解決方案)編譯好了,如果我根本不使用ext.lib。

我的問題是如何鏈接過程的工作,我可以做些什麼來糾正這個鏈接錯誤。 (注意,如果沒有ext.lib的存在,我的staticprj和dynprj的鏈接就沒有問題了。我的編譯工作正常,我的代碼工作正常。當我嘗試將另一個ext.lib鏈接到staticprj時,我只收到鏈接錯誤和dynprj並使用ext.lib中的函數)

在此先感謝。

回答

-1

我不太確定它會工作,但請嘗試將.dll放入「mysol」調試文件夾中。幾個星期前,當我將庫編譯爲.dll時,我遇到了類似的問題。我只是將該.dll放在我的調試文件夾中,並且工作可愛。

+0

哪個.dll你在說什麼?你的意思是我使用的外部庫ext.lib?因爲最後我試圖建立一個使用和外部庫的DLL ext.lib – user1612986

+0

您是否嘗試過:Project-> Properties-> Configuration Properties-> Linker-> Input並輸入您的「libname.lib」和:。 ..-> Conf ...-> VC++目錄,並添加路徑到您的庫目錄中的「libname.lib」文件夾。 –

+0

我以不同的方式做到這一點。我在頭文件中使用#progma註釋(lib,「libraryname」)。它的工作原理 – user1612986