référence indéfinie vers « __ctype_b » [Résolu] - C - Programmation
Marsh Posté le 28-06-2006 à 11:49:00
Bon j'ai trouvé tout seul !
Donc j 'ai fait deux fichiers .c :
__wrap___ctype_b.c
#include <ctype.h> |
__wrap___ctype_tolower.c
#include <ctype.h> |
Puis les .o :
gcc -c __wrap___ctype_b.c |
Puis j'ai ajouté à la variable LDFLAGS dans le fichier .compilrc : $(LIBRAIRIES)/__wrap___ctype_b.o $(LIBRAIRIES)/__wrap___ctype_tolower.o -Wl,--wrap,__ctype_b -Wl,--wrap,__ctype_tolower
Et ça marche, je peux compiler à nouveau sans patcher la libc6 et sans avoir deux libc6 différentes sur un même post !
Marsh Posté le 28-06-2006 à 11:59:48
ReplyMarsh Posté le 28-06-2006 à 13:09:54
Elmoricq a écrit : Je le garde dans un coin, ce post, vu que je bosse aussi sur Sybase. |
La distribution que j'utilise est une Ubuntu Dapper Drake.
Pour les pilotes Sybase c'est la version DB et non CT qu'on utilise. La version CT est plus récente et je ne pense pas qu'on aurait eu ce problème avec mais pour l'utiliser on doit re-écrire toutes nos librairies ...
Marsh Posté le 28-06-2006 à 13:18:42
Ouaip. Et surtout la CTLibrary est une merde sans nom.
Ce qu'on faisait en un tournemain avec la DBLibrary, il faut multiplier par 5 ou 6 le nombre de lignes de code en CTLib.
Rien que pour établir une connexion, il faut 7 ou 8 fonctions
Et je te raconte même pas la liste de bibliothèques à inclure à la compilation (contre -ldb avec la DBLib), évidemment toutes inter-dépendantes (si je te donne la liste, tu vas pleurer).
Je ne sais pas ce qu'ils ont fumé chez Sybase, mais je n'ai toujours pas trouvé de justification à un tel foirage. On a beaucoup perdu en passant à la CT, et la DB n'étant plus maintenue...
Marsh Posté le 28-06-2006 à 18:44:56
Elmoricq a écrit : Ouaip. Et surtout la CTLibrary est une merde sans nom. |
Pourtant les admins Sybase n'arrêtent pas de nous dire que la CT lib c'est géniale et que la DB lib n'est pas optimisée ... blablabla ....
C'est vraiequela DB lib est très simple d'utilisation dommage effectivement qu'elle ne soit plus maintenue !
Marsh Posté le 28-06-2006 à 10:05:48
Bonjour,
Pour le travail, je développe des batchs en C et j'utilise une librairie Sybase qui ne supporte pas les nouvelles version de la libc6.
/opt/sybase/lib/libsybdb.so: référence indéfinie vers « __ctype_b »
/opt/sybase/lib/libsybdb.so: référence indéfinie vers « __ctype_tolower »
collect2: ld returned 1 exit status
make: *** [traiter_avisdopere] Erreur 1
Actuellement la seule solution que je connaisse est de recompiler la libc6 en modifiant quelques paramètres mais c'est chiant et long !
Je me suis donc dit que je pouvais utiliser plusieurs libc6 en parallèle ! Une pour les batchs et la libc6 du système pour toutes les autres applications. La commande ldd a désigné les dossiers /lib et /???/cmov/ que jJ'ai donc mis de côté (avec mes librairies dynamiques).
J'ai mis à jour la variable LD_LIBRARY_PATH de façon à utiliser les librairies que j'avais mis de côté. Cela fonctionne bien sauf pour la librairie ld-linux.so ! Je n'arrive pas à forcer l'usage de cette librairie par gcc lors de la compilation (en revanche il utilise bien la libc6 que j'ai mis de côté).
Avez-vous une solution pour résoudre mon problème ?
Dans un environnement spécifique je souhaite utiliser une librairie ld-linux.so.2 différente de /lib/ld-linux.so.2.
Merci.
Message édité par darkoli le 28-06-2006 à 11:50:08
---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html