12
votes

Quelle est la signification de "AVERTISSEMENT: lier la bibliothèque partagée contre la bibliothèque statique n'est pas portable"?

Je fais une bibliothèque dynamique en utilisant une fonction de libmxml.a la bibliothèque, mais je reçois cet avertissement:

gcc: /home/Mr32/gst-template4_final/gst-plugin/src/libmxml.a: linker _
input file unused because linking not done


4 commentaires

Pourriez-vous ajouter des commandes exactes qui ont imprimé ces avertissements?


Assurez-vous que la bibliothèque partagée libmxml.so est construite, puis utilisez-la.


freesoftwaremagazine.com/articles/agaal/... peut être pertinent pour vos intérêts.


@BasileSarTaryNkevitch Voir mon édition


4 Réponses :


9
votes

Assurez-vous que les fichiers d'objet dans libmxml.a ont été construits avec -fic . Il est nécessaire de créer une bibliothèque partagée. Voir aussi http://tldp.org/howto/program-library-howto /shared-libries.html

Voici un exemple rapide xxx


0 commentaires

7
votes

La liaison des bibliothèques partagées aux bibliothèques statiques n'est pas possible (à moins que vous ne sachiez vraiment très bien ce que vous faites). Ne le faites pas.

Le premier avertissement est de libtoure. Il vous dit que l'opération que vous avez demandée fera différentes choses sur différents systèmes et certaines de ces choses ne sont probablement pas ce que vous voulez. Souvent, il va simplement échouer de différentes manières spectaculaires, car le code qui va dans des bibliothèques partagées et statiques doit être compilée avec différents drapeaux de compilateur.

Le deuxième avertissement provient de GCC. Il vous dit que fournir une bibliothèque statique lorsque la compilation est inutile. C'est parce que vous avez $ (chemin) /libmxml.a dans c drapeaux , où il n'a aucune affaire d'être. En fait, la plupart du temps, vous devriez pas avoir $ (chemin) /libmxml.a , mais -l $ (chemin) -Lmxml au lieu. Cela devrait toujours aller dans ld drapeaux , mais GCC ne se plaingera pas si cela le rend également à la ligne de commande compilateur.


4 commentaires

La liaison des bibliothèques partagées aux statiques est parfaitement possible et souvent souhaitable sur UNIX.


HM, je me suis trompé par le deuxième avertissement. Maintenant, je vois que la bibliothèque statique a été incluse dans CFLAGS, j'ai réécrit la réponse. Encore bien sûr, tout en reliant des bibliothèques partagées aux statiques, ce n'est certainement pas quelque chose que l'on devrait faire régulièrement. C'est plutôt une bonne canette de vers.


Hey merci je viens de mettre -l $ (chemin) dans ldflags et -lmxml dans gst_libs and magic n'a travaillé aucun avertissement ... !!! Merci mec..!!


@ M.32: Oui. Je suppose que le compilateur a trouvé à la fois statique et dynamique MXML et choisi la dynamique lorsque vous l'avez donné la chance. Ce qu'il devrait vraiment; Même si vous n'avez pas eu de problèmes avec la position-indépendance, vous auriez des problèmes lorsqu'un autre plugin souhaitait également utiliser MXML. Avec une liaison dynamique, il y aura une copie et tout ira bien, mais avec statique, il y aurait deux problèmes de débogage et de déboguer pourraient apparaître.



5
votes

Lier la bibliothèque partagée libgstmatroskademux.la contre la bibliothèque statique

Cela vous avertit que si vous par exemple. J'ai essayé de construire ceci sur 64 bits Linux, cela échouera probablement. C'est parce que sur x86_64, tout code qui est lié à une bibliothèque partagée doit être compilé avec -fic drapeau et code qui vit dans .a . Les bibliothèques ne sont généralement pas.

GCC: ... / libmxml.a: fichier d'entrée de liaison inutilisé car la liaison n'est pas effectuée

Cela vous avertit que vous avez une gamme de commandes de bogus. Très probablement, vous compilez quelque chose et avoir -c sur la ligne de commande (qui indique à 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 avertiez de penser (plus) à ce sujet.


0 commentaires

0
votes

En fait, toutes les réponses précédentes sont erronées sur l'explication du premier avertissement que j'ai peur (surtout l'accepté). L'avertissement que la bibliothèque statique n'est pas portable susceptible de susciter le fait que vous avez eu le chemin à codé dur (il a à voir avec le fait que le fichier libgstmatroskademux.la contiendra réellement Ce chemin). Donc au lieu de s'appuyer sur pkg-config ou GCC pour effectuer la recherche de bibliothèques statiques pour vous (ce qui garantirait que votre projet compile avec succès sur plusieurs plates-formes et distributions) 'VE utilisé des chemins fixes pour la bibliothèque statique (et ledit chemin serait probablement différent sur d'autres plates-formes). Le correctif est en effet de passer -l $ (chemin) -Lmxml à GCC (comme suggéré par la deuxième partie de la réponse acceptée) car cela garantira une plus grande compatibilité et Faites le reliant la bibliothèque partagée ... contre la bibliothèque statique ... n'est pas portable! Erreur disparaît également.


0 commentaires