2015-08-21 1 views
0

Je suis en train d'utiliser des méthodes contenues dans une bibliothèque partagée (libscplugin.so)symbole caché `stat » dans libc_nonshared.a (stat.oS) est référencé par ASM

Je satisfait à toutes les exigences des bibliothèques: * libc.so avec un lien symbolique pour libc.so.6 * libz.so avec un lien symbolique pour libz.so.1.2.8 * libstdc++.so avec un lien symbolique vers libstdc++.so.6.0.20

lors de la compilation je reçois le message d'erreur suivant:

$ gcc test.c -o test -L/usr/lib/arm-linux-gnueabihf/ -lscplugin /usr/bin/ld: test: hidden symbol `stat' in /usr/lib/arm-linux-gnueabihf/libc_nonshared.a(stat.oS) is referenced by DSO /usr/bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit status

La seule référence que je pouvais trouver à libc_nonshared.a est /usr/lib/arm-linux-gnueabihf/libc.so:

$ cat libc.so /* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf32-littlearm) GROUP (/lib/arm-linux-gnueabihf/libc.so.6 /usr/lib/arm-linux-gnueabihf/libc_nonshared.a AS_NEEDED (/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3))

En test.c je tente d'utiliser deux fonctions de la bibliothèque partagée (totalement sans rapport avec stat). Que puis-je faire pour compiler?

Répondre

0

Votre problème est ici:

Je satisfait à toutes les exigences des bibliothèques:

  • libc.so avec un lien symbolique vers libc.so.6

Ce n'est pas une configuration valide pour la glibc. libc.so est censé être un fichier texte (script d'éditeur de liens) comme vous l'avez vu à la fin de votre réponse. Vous faites quelque chose de bizarre et inutile si vous créez des liens symboliques vers des bibliothèques partagées comme celle-ci. Utilisez le libc.so qui est fourni (et vous devez le faire lors de la construction de vos autres bibliothèques partagées - votre problème en ce moment est qu'ils étaient mal reliés) et tout fonctionnera correctement.

+0

Suppression des résultats symlink dans la sortie suivante: «/usr/bin/ld: avertissement: libc.so, nécessaire par /usr/lib/arm-linux-gnueabihf//libscplugin.so, non trouvé (essayer en utilisant -rpath ou -rpath-link) " Même si'/usr/lib/bras-linux-gnueabihf/libc.so' existe –

+0

Pouvez-vous clarifier votre configuration? Êtes-vous en train de compiler ou de travailler avec le compilateur natif de votre système hôte? Quelle distro utilisez-vous? –

+0

Je suis sur Ubuntu 14.10 (Linux feelinsonice-hrd 3.2.34-30 # 17 SMP lun 13 avr 15:53:45 UTC 2015 armv7l armv7l armv7l GNU/Linux), pas de compilation croisée. La bibliothèque partagée que j'utilise est pour la plate-forme 'armeabi-v7a'. –