簡體   English   中英

如何處理第三方 static 庫的 C++ static 庫依賴項

[英]Howto handle C++ static lib dependencies of third party static library

有人可以解釋為什么我在以下設置中遇到 LINK-Errors:

我有一個 static C++ MyOwnLib.lib ,它使用了一些 static 第三方LibA.lib、LibB.lib、LibC 只有MyOwnLib.lib使用了這個第三方庫的一些實現,因此我在 MyOwnLib 中#included了所有第三方庫。 cpp文件而不是 MyOwnLib。 h文件。

現在:當我構建 MyOwnLib.lib 時,它的工作沒有錯誤。

但是,當我使用/鏈接MyOwnLib.lib到我的 Tool.exe 項目時,盡管我只使用 MyOwnLib 中的方法/類型,但我得到屬於第三方庫的方法/類型的 LINK 錯誤。 .cpp文件。

我什至沒有在我的 Tool.exe 項目中使用任何第三方方法。

我發現:還有一些屬於我使用的第三方庫的.lib 文件,我真的不需要,但是一旦我將它們鏈接到MyOwnLib.lib ,我就不會收到 LINK 錯誤在我的 Tool.exe 項目中。 但是,這個“不需要的庫”使MyOwnLob.lib非常大,我實際上想避免這種情況。

我正在尋找類似的問題,但沒有找到解釋。

更新:我剛剛發現,使用 pIndom 前向聲明的 class 可以使用第三方庫的類型/方法,並且即使我沒有鏈接任何庫也將正確構建/編譯。

為什么這行得通? 如果我在正常的 class 中使用類型/方法,我會按預期出現 LINK 錯誤。 ?

謝謝

在鏈接時,普通的 linker 會嘗試解析任何符號,無論它們是否會被實際使用。 如果缺少一些,它會列出它們並中止構建。

如果您真的確定它們永遠不會被使用,一個可能的技巧是提供一個存根,將所有這些缺失的符號定義為指向 void 或 void function 的指針並將其添加到您的構建中。 這對於 linker 來說應該足夠了。

如果您不希望您的應用程序在沒有任何消息的情況下崩潰,您可以嘗試更聰明一點,並使用正確的簽名定義所有函數或方法,以發出錯誤消息並快速失敗。 該應用程序確實會被破壞,但至少您會知道問題出在哪里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM