2012-10-27 34 views
1

我想弄清楚如何儘可能使用靜態庫(與.a擴展名)「有效」。我研究靜態庫的原因是因爲我想將來自幾個.h和.cpp文件的代碼放到一個文件中,然後我可以輕鬆移動到不同的項目中。如何使用靜態庫中的函數

我創建了一個文件geometry.h,其中包含例如

double hypotenuse(double, double); 

和geometry.cpp文件的定義。我創建了一個libgeo.a文件,並在另一個程序(main.cpp,比如說)中對它進行了測試。我編這個程序是這樣的:

g++ main.cpp -o test -L. -lgeo 

我得到的錯誤'hypotenuse' was not declared in this scope。對此的一個明顯的補救辦法是在main.cpp中添加聲明double hypotenuse(double, double);,就像在geometry.h中一樣,但是爲什麼我要爲庫中包含的任何類和函數執行該操作?我可以在main.cpp中編寫#include "geometry.h",但是我必須始終具有頭文件,並且我想使用庫的原因是使用有用代碼的單個文件。

我認爲有一個圖書館的原因是你不需要在任何地方都帶來一堆不同的文件,但是如果我必須重新聲明所有的東西,那麼.a文件有什麼意義呢?需要?有什麼我錯過了嗎? 。庫通常如何使用?

+0

PS: 「庫」 是一個鏈接時的事情。 「標題」是編譯時的事情。像MSVS或Eclipse這樣的現代圖形用戶界面有時會模糊區別。但這種區別非常真實,非常重要。 「頭文件」是C/C++開發的重要組成部分。恕我直言... – paulsm4

回答

1

這就是頭文件是:)

這聽起來像你需要一個「geometry.h」 ......它肯定將有超過一類在一次程序的發展。

PS:

請失去了惱人的 「匿名參數」:

double hypotenuse(double, double); // BAD

double hypotenuse(double a, double b); // BETTER