2012-10-27 5 views
1

J'essaie de comprendre comment utiliser les bibliothèques statiques (avec l'extension .a) aussi "efficaces" que possible. La raison pour laquelle j'ai regardé dans les bibliothèques statiques est parce que je veux mettre le code de plusieurs fichiers .h et .cpp dans un seul fichier, que je puis facilement déplacer pour différents projets.Comment utiliser les fonctions des bibliothèques statiques

J'ai créé un fichier geometry.h contenant par ex.

double hypotenuse(double, double); 

et un fichier geometry.cpp avec la définition. J'ai créé un fichier libgeo.a et l'ai testé dans un autre programme (main.cpp, disons). Je compilé ce programme comme celui-ci:

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

Je reçois l'erreur 'hypotenuse' was not declared in this scope. Le remède évident à cela est d'ajouter la déclaration double hypotenuse(double, double); dans main.cpp, tout comme dans geometry.h, mais pourquoi voudrais-je faire cela pour toujours la classe et la fonction contenues dans la bibliothèque? Je pourrais écrire #include "geometry.h" dans main.cpp, mais je dois toujours avoir les fichiers d'en-tête et la raison pour laquelle je voulais utiliser les bibliothèques était d'avoir un seul fichier avec le code utile.

Je pensais que la raison d'avoir une bibliothèque était que vous n'auriez pas besoin d'apporter un tas de fichiers différents partout où vous allez, mais quel est le point dans les fichiers .a si je dois re-déclarer tout ce que je avoir besoin? Y a-t-il quelque chose que j'ai manqué? Comment les bibliothèques .a sont-elles habituellement utilisées?

+0

PS: "bibliothèques" sont une chose de lien. Les "en-têtes" sont une chose de compilation. Les GUI modernes comme MSVS ou Eclipse ont tendance à brouiller la distinction parfois. Mais la distinction est très réelle et très importante. Les "en-têtes" sont une partie essentielle du développement C/C++. A MON HUMBLE AVIS... – paulsm4

Répondre

1

C'est ce que les fichiers d'en-tête sont pour :)

Il semble que vous besoin un « geometry.h » ... et il aura certainement plus d'une classe dans une fois que votre programme évolue.

PS:

S'il vous plaît perdre les ennuyeux "arguments anonymes":

double hypotenuse(double, double); // BAD

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

Questions connexes