difficulté à comstackr contre une bibliothèque statique

J’ai créé une bibliothèque statique, libstuff.a , avec gcc et ar . J’ai installé la bibliothèque dans /custom/lib/dir/ et les fichiers d’en-tête dans /custom/include/dir/ . Lorsque j’essaie de comstackr une autre application sur l’archive, je rencontre des problèmes.

L’application que je suis en train de comstackr utilise essentiellement gcc -L/custom/lib/dir/ -I/custom/include/dir/ -lstuff .

Lorsque je tente de comstackr, j’obtiens une erreur à propos d’une fonction que je déclare dans stuff.h et que stuff.h définis dans stuff.c .

 main.c:51: undefined reference to `stuff_init' collect2: error: ld returned 1 exit status 

Si je retire libstuff.a de /custom/lib/dir/ le compilateur se plaint /usr/bin/ld: cannot find -lstuff . Si je le remets, il ne se plaint pas. Donc, trouver l’archive correctement.

Si je supprime la ligne de code #include "stuff.h" de main.c gcc se plaint que stuff_init soit indéfini, il faut donc trouver les en-têtes correctement.

Si je lance nm libstuff.a , la sortie comprend 0000000000000000 T stuff_init . Donc, la fonction est définie dans le fichier archive.

Alors qu’est-ce que je fais mal?

Vous ne montrez pas votre ligne de liaison exacte, mais il est probable que vous devriez (mais ne pas) lister les bibliothèques après les fichiers object:

 gcc -o program main.o -L/custom/lib/dir -lstuff 

S’il existe plus d’un fichier object en dehors des bibliothèques, répertoriez-les tous avant les bibliothèques. Les options -L peuvent aller n’importe où avant l’option -llib qui utilise une bibliothèque du répertoire donné.