2010-06-28 7 views
4

Je suis en train de construire une bibliothèque partagée, et je reçois l'erreur suivante:erreur éditeur de liens gcc: nœud version introuvable pour le symbole

libavformat.so: version node not found for symbol [email protected]_52

ld: failed to set dynamic section sizes: Bad value

Est-ce que quelqu'un sait ce que cela signifie erreur? Host est la cible i586-linux est-linux bras

Edit: Résolu, voir les commentaires

+1

S'il vous plaît afficher les paramètres de gcc que vous utilisez à la fois la compilation et la liaison. –

+0

Je me suis débarrassé de l'erreur - il était spécifique à la bibliothèque, causée par une directive assemby.symver – ognian

+1

en ligne, vous pouvez poster la solution ici comme une réponse –

Répondre

2

Il a été causé par une directive de montage en ligne .symver. Ma solution consistait à modifier manuellement le fichier config.h généré pour désactiver les symboles de version.

Découvrez internal.h lignes 214-223

0

Il a fallu quelqu'un d'autre à signaler à moi, donc je pensais que je pourrais aussi bien le mettre ici pour que d'autres comme moi peuvent comprendre la réponse de Ognian:

Cela se traduit par l'édition config.h après avoir exécuté ./configure et faire les entrées SYMVER concernant la PI sont mis à 0. Comme si:

#define HAVE_SYMVER 0 
#define HAVE_SYMVER_GNU_ASM 0 
#define HAVE_SYMVER_ASM_LABEL 0 
1

Oh, la fonction was moved in April 2009 de libavformat/util.c à un nouveau fichier en libavcodec/avpacket.c. Les États comment in internal.h explicitement:

If a function is moved from one library to another, a wrapper must be retained in the original location to preserve binary compatibility.

Mais il est impossible de conserver la compatibilité binaire lorsqu'une fonction est déplacé entre bibliothèques. Notez que ce bug a été signalé en Chromium project il y a plus d'un an. Par ailleurs, il n'est pas nécessaire de modifier config.h manuellement: vous pouvez exécuter ./configure --disable-symver.

+1

En fait, dans la version de FFmpeg que j'utilise dans cette révision (r25864 à partir de décembre 2010), l'option '--disable-symver' n'existe pas, donc la modification manuelle est nécessaire. Je suis ravi d'entendre parler de l'option de configuration, cependant! Je l'utiliserai quand nous passerons à FFmpeg ou à Libav. – Nathan

2

J'ai rencontré cette erreur lors de la construction de libsctp dans un environnement de génération personnalisé.

Le contrôle de version est expliqué here et un script de liaison peut être utilisé pour le contrôler. Dans mon cas, j'ai pu tirer dans le script éditeur de liens de version existante en ajoutant à la LDFLAGS spécifique à la cible variable makefile:

$(LIB_PATH)/libsctp.so: LDFLAGS += \ 
    -Xlinker --version-script=$(MODULE_PATH)/src/lib/Versions.map 
Questions connexes