Ne manquerait-il pas la fonction main() dans ton programme ?
Ne manquerait-il pas la fonction main() dans ton programme ?
si ... ^^
Mais on est obligé d'avoir un main? Dans le cas ou on compile un .so ? On ne doit pas avoir de main, puisque c'est une librairie de fonction ...![]()
L'erreur intervient ici à l'édition des liens. Si tu compiles un code pour une bibliothèque, tu ne fais pas cette édition des liens (pour laquelle tu dois obligatoirement spécifier une fonction main()). Avec gcc, en supposant que ton projet se compose de fichier1.h fichier1.c, fichier2.h, fichier2.c, tu compiles ta bib à l'aide des commandes suivantes:
Bien entendu, il est plus pratique d'automatiser le processus avec un outils tel que SCons ou make.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 gcc -Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes -fPIC -c fichier1.c gcc -Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes -fPIC -c fichier2.c gcc -shared -Wl,-soname,libmabibliotheque.so.0 -o libmabibliotheque.so.0.0.1 fichier1.c fichier2.c
Si tu utilises un EDI tel que Code::Blocks, il te faut créer un projet Bibliothèque partagée pour la bibliothèque.
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Il est vrai que lors du post du message d'erreur, je compilais le code pour en faire une application executable ... Et non pas une librairie ...
Sinon pour la librairie, j'utilise :
Création de la librairie statique: ar rv lib.a carre.o cube.o
Création de la librairie dynamique: gcc -shared carre.o cube.o -o lib.so
Compilation en utilisant la librairie statique: gcc pgm.c lib.a -o pgm
Compilation en utilisant la librairie dynamique: gcc pgm.c ./lib.so -o pgm
-----------
Merci Thierry pour toute ces info's
Partager