Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/03/2015, à 14: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, à 20: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, à 16: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, à 16:21)

#3 Le 15/03/2015, à 21: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, à 09: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, à 09: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, à 13:53

Compte anonymisé

Re : [Résolu] Compilation et glibc

Désolé, je sèche !

#7 Le 18/03/2015, à 10: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, à 12: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, à 12: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, à 15: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, à 10: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, à 20: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, à 20:34

Compte anonymisé

Re : [Résolu] Compilation et glibc

Tant mieux, j'osais pas te dire que ça allait être dur d'y arriver... big_smile