Pages : 1
#1 Le 15/03/2015, à 13:19
- TryphonCosinus
[Résolu] Compilation et glibc
Bonjour,
Je veux compiler une librairie (libusb-0.1.12 pour ne rien vous cacher) et l'installer sur mon NAS dont la version du noyau linux est 3.4.6. Ce NAS ne fournit pas d'outils pour effectuer ce travail. Pour y parvenir, j'ai installé Ubuntu 12.04 / noyau 3.4.6 en chroot dans ce NAS et il est parfaitement fonctionnel. Dans ce chroot, je peux compiler un programme et l'exporter dans le système du NAS. En général, ça se passe bien.
Cela se passe moins bien lorsque glibc est requis:
Pour le chroot Ubuntu, glibc est en version 2.15
Pour le système du NAS, glibc est en version 2.6
Mettre à jour le système du NAS avec glibc 2.15 ? Exercice périlleux pouvant conduire à un crash du système : à éviter!
La dernière version de libusb-0.1 est sortie en 2006
La première version de glibc 2.6 est sortie en 2007
Il y a donc de bonnes chances que libusb-0.1.12 tourne avec glibc 2.6 ...
Je compile donc libusb sous le chroot, je l'exporte dans le système du NAS et je l'utilise avec mon périphérique USB :
ImportError: /lib/libc.so.6: version `GLIBC_2.15' not found (required by /usr/local/lib/libusb-0.1.so.4)
Comment libusb-0.1 datant de 2006 pourrait-il requérir glibc 2.15 ????????????????????????????????
Pourquoi le compilateur ne semble pas savoir qu'il est inutile d'exiger au minimum la version 2.15 ?
Comment s'en sortir ?
Merci pour vos idées.
Dernière modification par TryphonCosinus (Le 28/03/2015, à 19:04)
Asus P7P55D EVO, quadcore i7 2,8 GHz, Gainward Radeon HD4870, Samsung T240HD sur DisplayPort, TV Plasma Samsung sur HDMI, NAS QNAP TS-559
Hors ligne
#2 Le 15/03/2015, à 15:14
- Compte anonymisé
Re : [Résolu] Compilation et glibc
Bonjour,
En compilant avec les headers de libc 2.15, la librairie libusb créée va rechercher au chargement libc 2.15 au minimum.
Je sais pas comment tu compiles, mais si tu utilises un .configure, tu dois pouvoir indiquer de linker en statique et pas en dynamique. Du coup plus de soucis avec un libc.so.
.configure --help
pour avoir les options.
Edit : pour gcc c'est les options -static-libgcc -static-libstdc++.
Dernière modification par alx (Le 15/03/2015, à 15:21)
#3 Le 15/03/2015, à 20:52
- TryphonCosinus
Re : [Résolu] Compilation et glibc
Merci, j'ai revérifié. Voici un extrait de l'aide de .configure :
--enable-shared[=PKGS]
build shared libraries [default=yes]
--enable-static[=PKGS]
build static libraries [default=yes]
"static" est donc la valeur par défaut. J'ai donc simplement exécuté
sh ./configure
Je compile de façon plutôt basique (ce n'est pas ma profession), je fais au mieux .... mais je reconnais ne pas maîtriser tout ce qui se passe dans le script .configure.
Asus P7P55D EVO, quadcore i7 2,8 GHz, Gainward Radeon HD4870, Samsung T240HD sur DisplayPort, TV Plasma Samsung sur HDMI, NAS QNAP TS-559
Hors ligne
#4 Le 16/03/2015, à 08:42
- Compte anonymisé
Re : [Résolu] Compilation et glibc
Pourquoi ne pas installer les paquets libusb-1.0.0 et libusb-1.0.0-dev directement pour le noyaux 3.4.6 ?
#5 Le 17/03/2015, à 08:01
- TryphonCosinus
Re : [Résolu] Compilation et glibc
Pour tester mon matériel, c'est effectivement ce que j'ai tenté de faire la première fois en compilant libusb-1.0.19. Opération réussie sous Ubuntu 14 (mon ordinateur de bureau, pour vérifier que j'en suis capable). Sur mon NAS, libusb-1.0.19 compilé a réclamé glibc 2.7. Ce que j'ai appris sur mon périphérique (dont le constructeur ne fournit pas de pilote pour linux), c'est qu'il est actuellement compatible avec libusb-0.1 (un pilote vient d'être écrit et publié par un groupe de passionnés) et qu'il l'est aussi avec libusb-1.0.19 (un programme en C existe pour transférer les données brutes mais ce n'est pas un projet abouti). Cependant, rien n'existe pour exploiter libusb-1.0.x (x<19). Cela dit, libusb-1.0 étant plus récent, je ne peux pas lui en vouloir d'exiger plus que glibc 2.6.
Chaque fois que je tente une approche, je suis indéfectiblement ramené à glibc.
Sur le NAS, je ne peux pas installer les paquets non prévus, je ne peux qu'essayer de compiler. Bien sûr, dans le chroot, je peux installer ces paquets (en fait ils y sont déjà) mais l'utilisation de libusb-1.0 conduit au message "Couldn't init libusb, Other error" qui est la manifestation d'une erreur inconnue.
Asus P7P55D EVO, quadcore i7 2,8 GHz, Gainward Radeon HD4870, Samsung T240HD sur DisplayPort, TV Plasma Samsung sur HDMI, NAS QNAP TS-559
Hors ligne
#6 Le 17/03/2015, à 12:53
- Compte anonymisé
Re : [Résolu] Compilation et glibc
Désolé, je sèche !
#7 Le 18/03/2015, à 09:26
- Compte anonymisé
Re : [Résolu] Compilation et glibc
Tu peux essayer de copier aussi libc.so du chroot sur ton nas et utiliser LD_PRELOAD :
LD_PRELOAD=/chemin/libc.so ./ton_programme
#8 Le 22/03/2015, à 11:41
- TryphonCosinus
Re : [Résolu] Compilation et glibc
Bonjour,
Merci pour cette suggestion. Il faut charger plusieurs librairies. J'ai essayé
LD_PRELOAD='./libc.so.6 ./libstdc++.so.6 ./ld-linux.so.2' ./MonProg
J'ai correctement ciblé les librairies que j'ai copiées du chroot en définissant les liens symboliques appropriés.
Mais la réaction change en fonction de l'ordre des librairies appelées :
error while loading shared libraries: ./libc.so.6: unexpected PLT reloc type 0x2a
ou
symbol lookup error: ./libstdc++.so.6: undefined symbol: _ZNSt8messagesIcE2idE, version GLIBCXX_3.4
Je ne suis pas sûr que les trois librairies soient effectivement chargées, je suis seulement sûr qu'au moins une d'entre elle est chargée. Quelle est la syntaxe correcte pour y parvenir ?
Merci.
Dernière modification par TryphonCosinus (Le 22/03/2015, à 11:45)
Asus P7P55D EVO, quadcore i7 2,8 GHz, Gainward Radeon HD4870, Samsung T240HD sur DisplayPort, TV Plasma Samsung sur HDMI, NAS QNAP TS-559
Hors ligne
#9 Le 22/03/2015, à 14:24
- TryphonCosinus
Re : [Résolu] Compilation et glibc
Apparemment, les chemins absolus dans ld-linux.so.2 sont codés en dur. J'ai créé l'arborescence de ces trois librairies dans le NAS telle qu'elle est dans le chroot (par chance, cette arborescence est différente dans le NAS). Mais le constat est exactement le même et je ne suis pas sûr de la syntaxe :
LD_PRELOAD='/lib/i386-linux-gnu/ld-linux.so.2 /usr/lib/i386-linux-gnu/libstdc++.so.6 /lib/i386-linux-gnu/libc.so.6' ./MonProg
Asus P7P55D EVO, quadcore i7 2,8 GHz, Gainward Radeon HD4870, Samsung T240HD sur DisplayPort, TV Plasma Samsung sur HDMI, NAS QNAP TS-559
Hors ligne
#10 Le 23/03/2015, à 09:49
- Compte anonymisé
Re : [Résolu] Compilation et glibc
Pour voir si c'est les bonnes librairies qui sont chargées (ldd) :
LD_PRELOAD='/lib/i386-linux-gnu/ld-linux.so.2 /usr/lib/i386-linux-gnu/libstdc++.so.6 /lib/i386-linux-gnu/libc.so.6' ldd ./MonProg
#11 Le 28/03/2015, à 19:04
- TryphonCosinus
Re : [Résolu] Compilation et glibc
J'ai abandonné cette stratégie car je viens de mettre la main sur un "toolchain" fait maison pour mon NAS avec lequel j'ai pu compiler libusb-0.1. Je fais face maintenant à un autre problème non identifié mais c'est un autre sujet. Merci Aix de m'avoir orienté dans la recherche du problème en stimulant mon intuition.
Asus P7P55D EVO, quadcore i7 2,8 GHz, Gainward Radeon HD4870, Samsung T240HD sur DisplayPort, TV Plasma Samsung sur HDMI, NAS QNAP TS-559
Hors ligne
#12 Le 28/03/2015, à 19:34
- Compte anonymisé
Re : [Résolu] Compilation et glibc
Tant mieux, j'osais pas te dire que ça allait être dur d'y arriver...
Pages : 1