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

9 posts / 0 new
Τελευταία καταχώριση
Εικόνα: mihalisla
mihalisla
Απουσιάζω!
Registered User
Μέλος από: 1 Ιαν 1970
Πόντοι: 130
Πως να δημιουργώ νέες δικές μου libraries σε c++ ???

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

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

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

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

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

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

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

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

Εικόνα: marios
marios
Απουσιάζω!
Registered User
Μέλος από: 21 Δεκ 2008
Πόντοι: 105

Θα σου περιγραψω την διαδιακασια για να καταλαβεις για το 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

__________________

Πως το'πες αυτό; Linux.....; Μπαααα....Μονο Windows!

Εικόνα: mihalisla
mihalisla
Απουσιάζω!
Registered User
Μέλος από: 1 Ιαν 1970
Πόντοι: 130

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

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

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

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

Εικόνα: marios
marios
Απουσιάζω!
Registered User
Μέλος από: 21 Δεκ 2008
Πόντοι: 105

νομιζω σε g++ με -Ι περιεχεις include paths , με -L library paths.

__________________

Πως το'πες αυτό; Linux.....; Μπαααα....Μονο Windows!

Εικόνα: marios
marios
Απουσιάζω!
Registered User
Μέλος από: 21 Δεκ 2008
Πόντοι: 105

..

__________________

Πως το'πες αυτό; Linux.....; Μπαααα....Μονο Windows!

Εικόνα: mihalisla
mihalisla
Απουσιάζω!
Registered User
Μέλος από: 1 Ιαν 1970
Πόντοι: 130

Η διαφορά ποιά είναι μεταξύ include paths & library paths???

Εικόνα: marios
marios
Απουσιάζω!
Registered User
Μέλος από: 21 Δεκ 2008
Πόντοι: 105

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

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

__________________

Πως το'πες αυτό; Linux.....; Μπαααα....Μονο Windows!

Εικόνα: mihalisla
mihalisla
Απουσιάζω!
Registered User
Μέλος από: 1 Ιαν 1970
Πόντοι: 130

Ευχαριστώ οκ το κατάλαβα τώρα...! :)

Εικόνα: marios
marios
Απουσιάζω!
Registered User
Μέλος από: 21 Δεκ 2008
Πόντοι: 105

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

__________________

Πως το'πες αυτό; Linux.....; Μπαααα....Μονο Windows!