Πως να δημιουργώ νέες δικές μου libraries σε c++ ???

mihalisla | Δευ, 02/02/2009 - 21:15 | 1' | 8

Καλησπέρα σε όλους!!!Έχω κάποιες απορίες για C++...

Θα προσπαθήσω να είμαι σύντομος...

1.Ποια είναι η διαδικασία δημιουργείας νέας βιβλιοθήκης σε c++???

Π.χ  Φτιάχνω ένα κενό αρχείο foo.h κλπ. κλπ

2.πώς μπορεί ο g++ compiler να ψάχνει και σε ένα δικό μου φάκελο και τους υποφακέλους

του για τις δικές μου βιβλιοθήκες?

Ευχαριστώ πόλυ παιδιά για την πολύτιμη βοήθειά σας!!!

Υ.Γνωρίζω  μόνο ότι οι βιβλιοθήκες χωρίζονται σε static & dynamic:sick:

Δώσε αστέρια!

MO: (ψήφοι: 0)

Σχόλια

Θα σου περιγραψω την διαδιακασια για να καταλαβεις για το 1 και το 2 που ρωτας αλλα για static library. Οι δυναμικες ειναι λιγο πιο συνθετες, υπαρχει αρκετο υλικο στο net για να βρεις.

θελουμε να φτιαξουμε ενα προγραμμα με ονομα "myprog". το οποιο θα χρησιμοποιησει την βιβλιοθηκη(static) "mylib.a"
μεσα στην οποια καπου υπαρχει η συναρτηση "printhello"(η οποια τυπωνει απλα HEllO).

1)για να μπορεις να χρησιμοποιεις την printhello θα πρεπει αυτη να εχει δηλωθει σε καποιο .h αρχειο το οποιο θα δηλωσεις(με include) στο προγραμμα σου.Αλλα θε πρεπει να δημιουργησεις και ενα αντιστοιχο αρχειο με καταληξη .cpp(c++) που θα περιεχει τον κωδικα της printhello.Ετσι εχουμε:

στο αρχειο myfunctions.h

void printhello(void);

στο αρχειο myfunctions.cpp

#include < stdio.h > /*για την printf*/
#include "myfunctions.h"

void printhello(void)
{
printf("Hello\n");
}

τα "" στην include δηλωση λενε στον g++ να ψαξει το .h αρχειο πρωτα στον τρεχοντα καταλογο και μετα αν χρειαστει να ψαξει να το βρει στους βασικους καταλογους.Στο παραδειγμα που δινω ολα τα αρχεια βρισκονται σε ενα φακελο.αν βρισκοταν μεσα σε καποιον υποκαταλογο
θα επρεπε να εχω γραψει ασ πουμε #include "ypokatalogos/myfunctions.h"

2) μεταγλωτιζω το myfunctions.cpp ετσι ωστε να ειναι ετοιμο να μπει στη βιβλιοθηκη που θελω να κανω
g++ -c -o myfunctions.o myfunctions.cpp

ετσι εχω ενα myfunctions.o αρχειο

3)δημιουργω την βιβλιοθηκη μου
ar -cvq mylib.a myfunctions.o

4)Τωρα πλεον για να χρησιμοποιω την συναρτηση printhello θα πρεπει να περιεχω μια δηλωση #include "myfunctions.h"
ενω κατα την μεταγλωτιση του main προγραμματος μου θα πρεπει συνδεω και την βιβλιοθηκη mylib.a

αρχειο myprog.cpp
#include "myfunctions.h"

int main(void)
{

printhello();

return 0;
}

5) μεταγλωτιση του προγραμματος σε myprog
g++ -o myprog myprog.cpp mylib.a

Αυτα, με "man ar" "man g++" (σε τερματικο) θα βρεις πολλα πραγματα. ελπιζω να σοθ=υ εδωσα ιδεα για το τι γινεται
αν η βιβλιοθηκη βρισκοταν αλλου τοτε
g++ -o myprog.cpp -L/path/to/library-directory -lmylib

Χίλια ευχαριστώ ακριβώς αυτή την γενική διαδικασία έψαχνα μόνο που

δεν ξέρω εάν υπάρχει τρόπος να δηλώσω καθολικά στο σύστημα τα PATHS για να

περιλαμβάνει ο g++ τους καταλόγους που θέλω!

Ευχαριστω και πάλι πάντως,την κεντρική ιδέα την έπιασα!!!

στο include paths ο g++ θα ψαξει να βρει .h αρχεια. αρχεια που κανεις include, οι βιβλιοθηκες ειναι μεταγλωτισμενος κωδικας
και στην περιπτωση του -L του δινεις επιπλεον paths για να βρει τις βιβλιοθηκες που εσυ δηλωνεις στην εντολη της μεταγλωτισης και οχι μεσα απο καποιο cpp .h αρχειο. η χρηση των βιβλιοθηκων ειναι για να γινεi συνδεση του μαιν προγραμματος με την βιβλιοθηκη ετσι ωστε το εκτελεσιμο αρχειο να περιεχει οτι χρειαζεται.

δηλαδη του λες του g++ :θα μεταγλωτισεις το α κανοντας συνδεση με το β και ψαξε κ στον καταλογο ταδε(εκει θα βρεις το β)

Αυτο θα σου φανει χρησιμο http://www.dwheeler.com/program-library/Program-Library-HOWTO/