Forum Programmation.c Bibliothèques statiques & dynamiques

Posté par  (site web personnel) .
Étiquettes : aucune
0
26
jan.
2005
Voila, j'ai un problème ...
J'essaie de compiler une petite application qui est liée a une bibliothèque faite maison (raydium).

En gros, je compile ma lib et ensuite, je crée libraydium.a et libraydium.so.

Un problème c'est que raydium est lui-même lié statiquement à libphp.a et à libode.a. Il faudrait donc que libraydium.a contienne les deux autres bibliothèques.
Comment faire pour inclure le contenu d'une archive .a (ode et php) dans une autre archive .a (raydium) ?


Un autre problème: lorsque je compile un petit exemple et que je le lie à libraydium.so, il ne s'execute pas:
./test: relocation error: ./libraydium.so.0: undefined symbol: raydium_trigo_abs
Si le symbole « raydium_trigo_abs » n'est pas défini c'est simplement que c'est une macro définie (dans le fichier header) par:
#define raydium_trigo_abs(A) ( (A) < (0) ? (-A) : (A) )
Je me demande comment gcc a pu compiler mon fichier test avec cette fonction surtout qu'après la précompilation de mon fichier test, il ne fait nulle-part référance à cette fonction (et c'est normal, les #define ont joué leur role).

mildred@louve:~/Projects/raydium/raytest/raydium_prog $ gcc -E test6b.c -Iphp/ -Iphp/main/ -Iphp/Zend -Iphp/TSRM | grep raydium_trigo_abs
rien du tout
mildred@louve:~/Projects/raydium/raytest/raydium_prog $


C'est normal ?
  • # Les sources

    Posté par  (site web personnel) . Évalué à 1.

    Pour ceux que ca intéresse, les sources de raydium sur léquelles je travaille sont disponibles à cette adresse: http://louve.dyndns.org/projets/raydium.dir/new-raydium/(...)
    Et je compile http://louve.dyndns.org/projets/raydium.dir/raytest/raydium_prog/te(...)
  • # nulle part

    Posté par  (site web personnel) . Évalué à 1.

    lorsque je fais strings ./test|grep raydium_trigo_abs je n'ai rien
    Pas plus avec strings ./libraydium.so|grep raydium_trigo_abs

    Je me demande comment il peut me mettre cette erreur, c'est incompréhensible ...
  • # Warnings gcc

    Posté par  . Évalué à 2.

    Je te conseille de recompiler ton programme en activant les "warnings" de gcc :

    gcc -Wall -E test6b.c -Iphp/ -Iphp/main/ -Iphp/Zend -Iphp/TSRM ...


    après ça, tu devrais avoir la réponse à ta question .

    Plus en détail, manifestement, il doit te manquer un #include <fichier.h>
    quelque part, et gcc considère par défaut que raydium_trigo_abs est du type

    int raydium_trigo_abs (int)
    • [^] # Re: Warnings gcc

      Posté par  (site web personnel) . Évalué à 1.

      Merci, j'y ai pensé mais ca na pas lair d'être ca ...
      D'abord, lors de la précompilation, la fonction n'apparait plus (elle a été remplacée). J'ai vérifié dans mon fichier test et avec tous les fichiers de la lib.
      Ensuite, gcc ne m'indique rien allant de ce coté (toutes les compilations avec -Wall).

      je ne comprends pas du tout d'ou ca vient. c'est très étrange.

      edit: maintenant, je comprends ... je pensait avoir fait un lien symbolique de l'endroit ou je compiel ma lib vers l'endroit ou je compile test.ca mais ce n'était pas le cas.
      maintenant ca se lance mais il y a une erreur de segemntation quelquepart ...
      on avence

Suivre le flux des commentaires

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