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

Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -  
Char Snipeur Messages postés 10112 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.
--
Salutation !
Char Snipeur

6 réponses

  1. crabs Messages postés 909 Statut Membre 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
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  3. crabs Messages postés 909 Statut Membre 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
  4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. crabs Messages postés 909 Statut Membre 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
  7. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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