Assurez-vous que les fichiers objets dans libmxml.a
ont été construits avec -fPIC
. Il est nécessaire de construire une bibliothèque partagée. Voir aussi http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
Voici un exemple rapide
$ cat stat.c
int five() { return 5; }
$ gcc -c stat.c -fPIC
$ ar crus libstat.a stat.o
$ cat dynamic.c
int ten() { return five() + five(); }
$ gcc -c dynamic.c -fPIC
$ gcc -shared -o libdyn.so dynamic.o -L. -lstat
$ ldd libdyn.so # Just to show static linkage to libstat.a
linux-vdso.so.1 => (0x00007fffca1b8000)
libc.so.6 => /lib/libc.so.6 (0x00007fc004649000)
/lib/ld-linux-x86-64.so.2 (0x00007fc004bf7000)
$ cat main.c
int main() { return ten(); }
$ gcc main.c -L. -ldyn
$ LD_LIBRARY_PATH=. ./a.out
$ echo $?
10
Lier des bibliothèques partagées à des bibliothèques statiques n'est pas possible (sauf si vous savez vraiment très bien ce que vous faites). Ne le faites pas.
Le premier avertissement provient de libtool. Il vous indique que l'opération que vous avez demandée fera différentes choses sur différents systèmes et que certaines de ces choses ne sont probablement pas ce que vous voulez. Souvent, cela échouera de diverses manières spectaculaires, car le code qui va dans les bibliothèques partagées et statiques doit être compilé avec différents indicateurs de compilateur.
Le deuxième avertissement provient de gcc. Il vous dit que fournir une bibliothèque statique lors de la compilation est inutile. C'est parce que vous avez $(PATH)/libmxml.a
en CFLAGS
, où il n'a pas à être. En fait, la plupart du temps, vous ne devriez pas avoir $(PATH)/libmxml.a
, mais -L$(PATH) -lmxml
Au lieu. Cela devrait toujours aller dans LDFLAGS
, mais gcc ne se plaindra pas si cela arrive aussi à la ligne de commande du compilateur.
Lier la bibliothèque partagée libgstmatroskademux.la à la bibliothèque statique
Ceci vous avertit que si vous par ex. essayé de le construire sur Linux 64 bits, cela échouerait probablement. En effet, sur x86_64, tout le code lié à une bibliothèque partagée doit être compilé avec -fPIC
drapeau et code qui vit dans .a
les bibliothèques ne le sont généralement pas.
gcc :.../libmxml.a :fichier d'entrée de l'éditeur de liens inutilisé car la liaison n'a pas été effectuée
Ceci vous avertit que vous avez une fausse ligne de commande. Très probablement, vous compilez quelque chose et avez -c
sur la ligne de commande (qui dit à GCC de s'arrêter après la compilation de la source, et pas effectuer la liaison). Puisque vous fournissez également libmxml.a
sur cette même ligne de commande, GCC s'est rendu compte que vous ne savez pas ce que vous faites et vous a averti d'y réfléchir (plus).