[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 -
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.
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:
- [ld/C++] problème de librairis sur linux
- Linux reader - Télécharger - Stockage
- Toutou linux - Télécharger - Systèmes d'exploitation
- Backtrack linux - Télécharger - Sécurité
- R-linux - Télécharger - Sauvegarde
- Linux mint 22.1 - Accueil - Linux
6 réponses
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
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
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.
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.
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
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
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 ...
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 ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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.
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.