2

希望有人可以幫助我在這裏。 我正在使用Visual Studio 2005並創建靜態鏈接到wxWidgets中的靜態庫。 我:靜態庫在wxWidgets中靜態鏈接,但使用我的lib的應用程序仍然需要wxwidgets

  1. 編譯wxWidgets的靜態地按照他們的指導
  2. 包括lib目錄在我的「附加庫目錄」屬性
  3. 添加在我的「附加依賴」的wxWidget庫的所有財產
  4. 將我的「鏈接庫依賴項」屬性設置爲「是」
  5. 將C++優化設置爲禁用。

我知道,其中一些步驟不應該做,我這樣做是爲了「以防萬一」理性。

雖然我的庫編譯沒有困難,但包含我的靜態庫的測試應用程序在鏈接過程中抱怨它找不到'wxbase28.lib'(我包括它)。

我應該注意到我完全抽象了wxWidgets,所以圖書館的公共API沒有提及任何與wxWidget相關的東西。測試應用程序不應該知道wxWidgets存在。

我的小型圖書館已經增長到超過51 MB,所以我感覺圖書館正在被鏈接...所以爲什麼我的測試應用程序抱怨它無法找到wxWidgets庫?

謝謝

回答

2

這是構建過程中的鏈接步驟,它依賴於以下內容:當您構建靜態庫時,由於沒有鏈接步驟,因此它不引入任何遞歸依賴關係。

因此,你的和你的wx的靜態庫都需要存在,然後才能連接最終的應用程序。

+0

如果我沒有正確地跟蹤你,請原諒我。你是說我不能在一個靜態庫中靜態鏈接,並且是我的庫的內部部分?這似乎是靜態鏈接的對立面。 如果是這樣的話,那麼是否存在一些靜態/動態鏈接步驟的排列組合,這些步驟會使我的應用程序只能鏈接到我的庫中,並讓wxwidgets在後臺執行一些工作,從而獲得我想要的效果? – Marc 2009-12-16 19:34:22

+1

如果您將庫設爲動態庫,那麼將會有一個鏈接步驟,並且將包含依賴的靜態庫。 但是,你不能在一個靜態庫中靜態鏈接,並且它是你的lib的一部分。 其實我說謊。在命令行中,您通常可以使用'lib'工具來提取對象文件並將其插入到靜態庫中。 lib工具可能有直接組合兩個庫的選項,否則只需從一個目錄文件中導出所有目標文件,然後導入另一個目錄文件。(這可能會與wx的許可發生衝突) – 2009-12-16 21:43:36

+0

當我在wxwidgets中靜態鏈接並編譯爲DLL時,我得到了相同的結果=(。我的測試應用程序仍然抱怨缺少wxbase28.lib。 我還在對於靜態鏈接的步驟有些困惑,但是當我包含wxwidgets時,我的構建膨脹到超過50兆(從大約1 MB),所以如果這些庫沒有被鏈接,那麼所有這些空間? – Marc 2009-12-18 06:19:39

0

我討厭建議明顯,但wxbase28.lib在您的測試應用程序的依賴性列表中列出?

+0

不幸的是,它不會那麼容易診斷... wxbase28.lib沒有在任何地方的屬性或任何文件在項目的整個文件夾樹中引用(保存構建日誌抱怨沒有找到它)。 不用擔心提出任何明顯的問題;我在linux更舒適,所以我錯過了Visual Studio的一些微妙之處 – Marc 2009-12-16 19:17:18