Ne manquerait-il pas la fonction main() dans ton programme ?
Version imprimable
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:
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
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