Je reçois cette erreur sur la phase de liaison lors de la compilation du package WebKit-1.1.5 sur ma boîte Ubuntu 9.04: J'aimerais quelques indications sur la façon d'attaquer ce problème, Soit en regardant dans l'erreur "Hidden Sybmol" ou en m'aidant à comprendre ce que la "section non prescrite sur la sortie" de la liaison signifie réellement. p> J'ai déjà vérifié qu'il s'agit d'un comportement cohérent qui persiste sur un crée propre; faire code> Invocation. P> P>
3 Réponses :
J'ai reçu l'erreur "section non prescrite sur la sortie" lorsque la pivotement croisée pour le bras et certaines des bibliothèques n'étaient pas correctement compilées avec -fic. À peu près sûr que ce n'est pas l'erreur ici si ... p>
C'était notre problème: plusieurs compilateurs de bras, ce qui entraîne la "section non prescrite de la sortie". Ajouter -fic résolut le problème.
S'il vous plaît essayez de supprimer le -fvisibilité = option cachée à partir de la commande Commandline. Il produira un objet plus important (avec certains symboles inutiles, qui n'auront pas d'importance à la fin, car c'est une exécutable), mais devrait éliminer le problème. Ce n'est pas une solution; plutôt une solution de contournement. Veuillez vérifier (ceci est juste une hunch) s'il n'y a pas de désactivation de la version libc entre bibliothèques et gtklauncher.o p>
ressemble à -fvisibilité = caché est une fonctionnalité quelque peu nouvelle dans GCC. Ou les docs n'ont pas été mis à jour et disent toujours que c'est nouveau ... peut-être que vous vous inquiétez avec des contrôles de sécurité ajoutés compilateurs à défendre contre les attaques de pile (Stack_chk ...), si un code a été compilé avec des défenses allumées , et certains n'était pas?
Ma réponse est spécifique à la combinaison du symbole masqué La réponse courte est: un symbole a été marqué Vous avez probablement compilé avec Vous pouvez reproduire un problème similaire comme celui-ci: p> ... puis la compilant: P> (...) est référencée par DSO code> et
section non prescritoire sur la sortie code> erreurs.
extern code> mais aussi marqué caché (voir Visibilité (GCC Wiki) et Comment écrire des bibliothèques partagées ( Ulrich Drepper) ). Aucun objet ou archives n'a été lié pour satisfaire la dépendance, mais un objet partagé était lié à un symbole correspondant. P>
-fvisbilibieux = caché , et s'il s'agissait d'une fonctionnalité de compilation ajoutée (comme un protecteur de pile) ou autre chose entièrement, le symbole émis dans votre code survolez la visibilité par défaut d'une référence de symbole non définie du même nom dans
libc_nonshared.a qui serait normalement satisfait par
libc.so code>. p>
# with gcc 4.9.2:
~ gcc badcode.c -shared -fPIC -o libbad.so -lc
/tmp/ccC0uG80.o: In function `blah':
badcode.c:(.text+0x19): undefined reference to `open_memstream'
/usr/bin/ld: /tmp/libbad.so: hidden symbol `open_memstream' isn't defined
/usr/bin/ld: final link failed: Bad value
# with gcc 4.4.7:
~ gcc badcode.c -shared -fPIC -o libbad.so -lc
/tmp/cc2SHUFD.o: In function `blah':
badcode.c:(.text+0x26): undefined reference to `open_memstream'
/usr/bin/ld: /tmp/libbad.so: hidden symbol `open_memstream' isn't defined
/usr/bin/ld: final link failed: Nonrepresentable section on output
# with oracle solaris studio (still in Linux) 12.3:
~ cc -shared -Kpic -o /tmp/libbad.so badcode.c -lc
badcode.o: In function `blah':
badcode.c:(.text+0x32): undefined reference to `open_memstream'
/usr/bin/ld: /tmp/libbad.so: hidden symbol `open_memstream' isn't defined
/usr/bin/ld: final link failed: Nonrepresentable section on output
Whoa ... la ressuscité est correcte, mais 6 ans après le fait? Je ne suis pas sûr que l'op est toujours la programmation ...
N'oubliez pas que longtemps après que vous soyez mort, en supposant que cela réponde à leur objectif, les gens utiliseront toujours tout ce qui est affiché ici et serait potentiellement intéressé par des problèmes que nous traitons maintenant.
J'ai trouvé le même problème ici: OSDIR.com/ml /Linux.hardware.karma.devel/2007-01/msg00038.htm l Dans ce cas, le problème était l'invocation LD explicitement.