Forum Programmation.c++ Une libraire dynamique C++ standalone... comment faire?

Posté par  .
Étiquettes : aucune
0
22
jan.
2007
Bonjour,

voila je cherche comment créer une librairie dynamique "libtoto.so" mais je voudrais qu'elle ne dépende pas d'autres librairies (et surtout pas des librairies libstdc++ etc...)

J'ai essayé les options de g++ -static et -static-libgcc, j'ai aussi essayé via ld directement. j'arrive parfaitement a créer des exécutables standalone mais jamais de librairie dynamique, soit je n'ai pas de message mais ldd m'indique toujours les liens, soit j'ai les messages static et shared/--pic-executable ne peuvent pas etre utilisés ensemble ou encore undefined reference to main...

Si quelqu'un connait l'astuce ou commande magique
  • # Nouvel essai

    Posté par  . Évalué à 2.

    J'ai tenté de mettre la libstdc++.a dans les objets a compiler pour la librairie dynamique. Ca doit pas etre loin de résoudre le probleme mais ld m'insulte:

    undefined versioned symbol name std::time_put_w@@GLIBCPP_3.2
    failed to set dynamic section sizes: Bad value

    • [^] # Re: Nouvel essai

      Posté par  . Évalué à 3.

      Si tu ne veux pas dépendre de libstdc++, il ne faut pas utiliser de choses qui en dépendent dans ton code ! C'est mal barré !

      Si tu veux en fait en faire une bibliothèque statique, il faut utiliser une bibliothèque libstdc++ statique elle-aussi, ce qui n'est pas facile à trouver (il vaut mieux recompiler la sienne, ce qui n'est pas une mince affaire, à priori).

      Enfin, un coup de ldd montre que la libstdc++ est elle-même dépendante de la libc, la libm (fonctions mathématiques), et de la libgcc_s. Mais çà, 90% des programmes purement C le sont aussi. Ça devrait donc passer quand même, mais il faudra au moins préciser un «  -lm » dans tes flags car la bibliothèque mathématique n'est pas encore considérée comme standard.
      • [^] # Re: Nouvel essai

        Posté par  . Évalué à 3.

        UPDATE :

        Hmpf. Posté trop vite, encore une fois. Je n'avais pas vu que tu avais essayé d'utiliser libstdc++.a .

        Ton problème est assez récurrent avec les libs statiques :Elles sont souvent une image figée d'un environnement particulier à un moment donné. Moralité : elle n'est plus compatible, car elle embarque les numéros de versions dans ses noms de fonctions, à la manière des modules du noyau.

        Essaie de trouver une version qui correspond parfaitement à la tienne.
        • [^] # Re: Nouvel essai

          Posté par  . Évalué à 1.

          Merci pour ton aide:

          en fait la libstdc++.a proviens de l'install du g++ (que j'ai compilé) que j'utilise pour tenter de compiler la librairie. Et effectivement le code utilise de nombreux objets de la STL...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.