簡體   English   中英

使用頭文件確定.lib / .dll

[英]Determine .lib / .dll with header file

我的程序中有3rd party庫。

例如 :

#INCLUDE <3rdPartyHeaderA.h>
#INCLUDE <3rdPartyHeaderB.h>

int main(int argc, char** argv)
{
  // some stuff
}

我怎么知道3rdPartyHeaderA.h正在使用哪個特定的.lib.dll 我查看了3rdPartyHeaderA.h但沒有任何信息。

我問這個問題是因為我需要確定應該將哪個.lib.dll添加到項目環境中,因為我不想添加所有這些。

這可能是一個愚蠢的問題。 如果是這樣,請隨意投票。 謝謝。

編輯 :感謝Wyzard澄清了我的問題。

它詢問如何確定在Foo.lib或Bar.lib(或Foo.dll或Bar.dll,或其他)中定義了3rdPartyHeaderA.h中聲明的函數。 –妖怪

除非您了解它們之間的相互依賴性,否則幾乎可以肯定必須將它們全部添加。 我不知道對此有何異議。

沒有自動的方法來“查找” lib與給定的標頭一起使用。 編譯時,鏈接器僅在一側進行所有函數調用,而在另一側進行所有庫調用並開始匹配。

以下是從最佳到最壞的標准解決方案:

  1. 閱讀您的圖書館隨附的文檔。 添加它告訴您的庫。 通常會有一些注釋或指令告訴您哪個庫導出哪些頭文件功能。

  2. 添加您可以找到的每個庫。 顯然,從3rdPartyHeader附帶的庫開始,然后轉到標准庫。 繼續添加,直到編譯為止。 在這一點上不要擔心太多。 通常,將不使用的庫包括在內是安全的,因為鏈接程序根本不會在可執行文件中引入該代碼。

一旦您的程序可以使用一長串的庫進行編譯,就可以開始逐個刪除它們並嘗試重新構建。 如果您刪除xyz.lib並且它仍然可以構建,則您不需要那個。

  1. 最后,您可以查看lib文件內部,查看它們導出了哪些功能,並將其與標頭中的功能列表進行比較。 有關詳細信息,請參見如何查看庫的內容。 在大多數情況下,這是不必要的。 如果您具有正確的庫,則鏈接器將找到您的函數。

暫無
暫無

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

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