Salut,
je crois que j'ai du mal à comprendre le fonctionnement des librairies ...
voilà mon souci :
je crée plusieurs librairies .a à partir de code c++ et d'autres à partie de code fortran 90
pas de soucis à la compil,
pas de soucis à l'édition de lien.
j'assemble le tout dans un .so, pas de soucis à part une floppée de warnings :
ld64: WARNING 131: Multiply defined weak symbol_M_acquire_lock__Q2_3std15_STL_mutex_lockGv) in /home/user/staff/...../libmini1.a(fichier1.o) and /home/user/staff/...../libmini2.a(fichier2.o) (2nd definition ignored).
à part ça, tout va bien
Mon but étant d'importer ma librairie dans du code python, je lance ma console et je tape import ma librairie :
$ python
Python 2.3.5 (#1, Sep 26 2006, 15:35:17) [C] on irix6-64
Type "help", "copyright", "credits" or "license" for more information.
>>> import grosseLibrairie
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ImportError: 8304:python: rld: Fatal Error: unresolvable symbol in ./grosseLibrairie.so: afficherNomCommande
je vérifie l'existence de cette fonction avec la commande nm :
$ nm libmini3.a | grep afficherNomCommande
[23] | 128| 248|FUNC |GLOB |DEFAULT |5 |afficherNomCommande
[17] | 0| 0|FUNC |GLOB |DEFAULT |UNDEF |afficherNomCommande
et pareil dans ma librairie .so, qui est sensée contenir cette lib.a
$ nm grosseLibrairie.so | grep afficherNomCommande
[543] |3752216220| 0|FUNC |GLOB |DEFAULT |UNDEF |afficherNomCommande
Le .so n'est-il pas sensé contenir l'information?
J'ai cherché sur le net mais je galère... Si quelqu'un avait un site ou un ouvrage à me conseiller, ça serait bien sympathique.
je suis sous IRIX6.5 en 64bits, voici mes options de compil et link :
C_COMP = cc -64 -w -LANG:std
CPP_COMP = CC -64 -w -LANG:std
F77_COMP = f90 -64 -w
F90_COMP = f90 -64 -w
LD_COMP = ld -shared -64 -o
AR_COMP = ar rv
C_FLAGS = -g -DUNIX
CPP_FLAGS = $(C_FLAGS)
voici ma commande pour créer mon .so:
(j'ai un fichier cpp en plus des librairies.a pour le wrapping python)
$(LD_COMP) grosseLibrairie.so $(CPP_OBJ) -wall -L$(INSTDIR)/lib -B static -lmini3 -lmini2 -lmini1 -B dynamic -lCio ;
Partager