[Linux][C][gcc] Tentative de création d'une librairie partagée
Salutations,
Je suis en train d'essayer de faire une librairie partagée qui pourrait être utilisée via 'pkg-config' ou l'option '-l' du compilateur.
Je n'y arrive pas, même en suivant les tutoriels, et en utilisant des outils comme 'libtool'...
libtool j'ai laissé tomber, c'est trop neuf pour moi et j'ai pas le temps de lire la documentation et la littérature.
Par contre, j'ai trouvé pas mal d'exemples qui me semblent valables sur la manière de créer une librairie partagée (shared library)
Voici comment je procède:
1. j'ai un fichier source cssm_wide.c que je compile avec ces deux commandes
Code:
1 2
| gcc -c -fPIC -O cssm_wide.c -o static/staticcssm_wide.o
gcc -shared -Wall static/staticcssm_wide.o -o shared/libcssm.so.1.0.1 |
2. je copie le fichier compilé dans shared dans /usr/lib64
3. je lance ldconfig
4. je lance la commande
Code:
ldconfig -p | grep cssm
et j'obtiens:
libcssm.so.1.0.1 (libc6,x86-64) => /usr/lib64/libcssm.so.1.0.1
Je me dis "on est bons..."
5. Je fais un programme de test qui contient des appels de fonctions qui sont propres à cette librairie, je sens déjà que ça craint car il manque le lien vers le fichier cssm_wide.h qui normalement devrait se trouver dans /usr/include, mais j'essaye quand même.
Quand je teste le programme avec l'option '-l' l'utilitaire 'ld' me dit "je ne sais pas ce c'est '-llibcssm'... (il ne trouve pas le lien entre libcssm et la librairie qui se trouve dans /usr/lib64).
Je sais que, normalement, il devrait être possible de spécifier un 'soname' (shared object name) mais je n'y parviens pas... et libtool, malgré les exemples dans la documentation ne me permet pas d'aller aussi loin.
QUESTIONS:
1. Comment fait-on pour créer une librairie qui permet par la suite d'utiliser pkg-config ?
2. Comment fait-on pour créer une librairie qui permet par la suite de passer au compilateur gcc via l'option '-l' le nom de cette librairie ?