[ld/C++] problème de librairis sur linux

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
bonjour,
Lors d'un link avec l'option "-static" j'ai l'erreur suivante:
In function 'machin' :: Using 'truc' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
le problème est que si je ne met pas le -static, il ne me trouve pas la librairie libg2c.so.0 (dans /usr/lib64)
Je voi 3 solutions à mon problème, mais je ne sais pas comment y arriver.
Le plus simple : dire à Linux ou se trouve "libg2c"
Reussir à compiler en static.
Ou plus malin, appliquer le static seulement à certaines lib (par exemple g2c en static, mais laisser "stdc++" en shared).
Dans les trois cas : Comment faire?
Merci de vos aides.
A voir également:

6 réponses

crabs Messages postés 908 Date d'inscription   Statut Membre Dernière intervention   507
 
Salut,

Perso j'utilise sans problème le mix des 2 types de bibliothèques statiques et
dynamiques (je fais rarement des bibliothèque dynamique).

Faire une binaire statique nécessite de disposer toutes les bibliothèques en mode
statique. Je ne vois pas comment tu peux t'en sortir autrement.

Sinon ton problème en mode dynamique c'est à l'exécution ou à l'édition de lien ?

A+, crabs
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut Crabs.
le problème est à l'éxecution.
la compilation/edition de lien ne pose pas de problème en non static.
C'est pour ça que je voulais lié en static, pour éviter les problèmes de bib dynamique introuvable. Si je comprend bien ce que tu me dit, le "-static" ne passe pas car j'ai certaines bib qui n'existent pas en statique, c'est ça?

Enfin, si quelqu'un pouvai me donner la signification du message d'erreur que j'ai.
0
crabs Messages postés 908 Date d'inscription   Statut Membre Dernière intervention   507
 
Salut,

Oui pour utiliser -static, toutes les bibliothèques doivent être statiques.
Pour ton problème d'exécution, ajoute /usr/lib64 à la variable d'environnement
LD_LIBRARY_PATH ou dans le fichier /etc/ld.so.conf
Enfin ça me parait bizarre qu'il n'y soit pas, à moins que ton programme ne
soit pas compilé en 64bits -- précise ta distribution, la version de ton noyau
et son mode (32 ou 64bits) ainsi que la nature de ton CPU.

Regardes les pages du manuel de ldd, ld.so et ldconfig.
A+, crabs
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
merci pour ta réponse, mais elle ne marche pas. On m'a déjà conseiller d'utiliser la variable LD_LIBRARY_PATH pour executer un programme ne trouvant pas un bib dyn. Mais chez moi ça ne fonctionne pas: déjà la variable n'est pas toujours existante, et quand elle existe elle ne contient même pas les répertoire habituels (/lib:/usr/lib)
Linux: RedHat 2.6.9-5 avec 4 proc AMD opteron 64bits
Le programme est compilé en 32bits. Mais j'avais compris que les proc 64 bits étaient compatible avec les "anciens" programme 32 et 16 bits.
étant un PC de travail, je n'ai pas les droit root, donc pour modifier /etc/ld.so.conf ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
crabs Messages postés 908 Date d'inscription   Statut Membre Dernière intervention   507
 
Salut,
Effectivement, y a une compatibilité, mais il faut que ton programme soit
compilé dans le même mode que tes bibliothèques dynamiques. Si tu disposes
que des versions 64bits de certaines bibliothèques, tu ne pourra faire qu'un
exécutable en 64bits.
A+, crabs
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut,
Merci Crabs.
Je comprend mieux le propblème. Il faut que tout soit en 32 ou 64 bits, bib inclues, donc comme je n'ai qu'une version 64 de libg2c, je ne peux pas lancer le programme compiler en 32.
La solution serai de compiler en 32, mais malheuresement, il y a une bib que je n'ai qu'en 32 (libsilo.a).
j'ai donc deux solution : trouver libg2c en 32, ou libsilo en 64...
J'espère que je m'en sortirai, et encore merci.
0