簡體   English   中英

使用外部庫時是否必須包含 header 文件?

[英]Do i have to include a header file when using an external library?

我正在嘗試開發一個使用 external.a static 庫的應用程序。

由於這個外部庫文件中已經定義了符號,有沒有辦法跳過使用它的.cpp 源文件中 header 文件的包含語句?

換句話說 - 如果我已經有了 .a 文件,為什么還需要 .h 文件?

提前致謝

你可以做這樣的事情:

#a.cpp
#include <iostream>
void who_are_you()
{
    std::cout << "I am A\n";
}


#b.cpp
#include <iostream>
void who_are_you()
{
    std::cout << "I am B\n";
}


#main.cpp
#include <iostream>
void who_are_you();

int main()
{
   std::cout << "who_are_you()\n";
   who_are_you();
   return 0;
}

接着

g++ -c a.cpp
g++ -c b.cpp
ar -r libA.a a.o
ar -r libB.a b.o
g++ main.cpp libA.a -o withA
g++ main.cpp libB.a -o withB

./withA 的 output 將是

who_are_you()
I am A

./withB 的 output 將是

who_are_you()
I am B

但通常@0___________ 的答案是正確的,你必須這樣做。 如果你注意到我們在主文件中定義了 who_are_you 的簽名。

使用外部庫時是否必須包含 header 文件?

從技術上講,您不必這樣做。 但是 header 文件將使使用該庫變得更加容易。

為什么我需要.h 文件?

header 文件聲明並在某些情況下定義類型、函數和變量。


如果您可以導入模塊,則不一定需要包含 header。

是的,你必須。

編譯器需要知道庫使用的數據類型,需要知道函數采用什么參數以及返回值是什么類型。 它還需要知道庫使用的全局對象。

換句話說 - 如果我已經有了 .a 文件,為什么還需要 .h 文件?

編譯器不使用 object 文件來檢索有關函數、數據或類型的信息。 您需要在源代碼中指定它。 Object 文件不是 C 語言的一部分。

您不需要.h文件。 您還可以在源代碼中鍵入聲明 function 原型。 .h文件可以包含在您的源代碼中,並可以在其他源代碼文件中重用。

編譯器需要知道您從庫中使用的資源的簽名。 這可以通過包含適當的 header 文件或自己提供簽名來完成。

您不需要包含 header 文件,只要您為從庫中使用的資源提供簽名/原型。

是的,總是。 您還可以使用#include添加現有功能。 並且編譯器將為您包含特定的文件。

暫無
暫無

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

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