Cygwin n'aime pas std on dirait...

Résolu/Fermé
@xi@g@me Messages postés 68 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 25 septembre 2018 - 12 juin 2008 à 09:06
@xi@g@me Messages postés 68 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 25 septembre 2018 - 23 juin 2008 à 04:45
Bonjour tout le monde,

J'ai un gros souci avec cygwin, et malgré des recherches approfondies je ne trouve aucune solution...

Je suis en train de faire un module en C++ pour utiliser sous ruby pour mon stage (j'utilise donc swigwin).
En compilant le fichier C++ avec un main dedans, tout fonctionne. Mais quand j'essaye de compiler pour en faire un module pour ruby (je crée le wrapper avec swigwin, le makefile avec ruby) l'édition des liens foire violament :
undefined reference to _Rb_tree_increment par exemple

quelqu'un peut m'aider?

merci d'avance
A voir également:

6 réponses

@xi@g@me Messages postés 68 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 25 septembre 2018 4
13 juin 2008 à 06:28
J'en ai un peu plus sur le problème:

les références non trouvées sont:

_Rb_tree_increment 2 fois
_Rb_tree_insert_and_rebalance 1 fois
_Rb_tree_decrement 2 fois

et aussi

std::ios_base::Init::Init() 1 fois
std::ios_base::Init::~Init() 1 fois
0
@xi@g@me Messages postés 68 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 25 septembre 2018 4
18 juin 2008 à 08:03
voici le fichier de sortie de la compilation : des idées?

g++ -I. -I/usr/lib/ruby/1.8/i386-cygwin -I/usr/lib/ruby/1.8/i386-cygwin -I.  -g -O2    -c helloworld_wrap.cxx
gcc -shared -s -Ixml2/include -I/usr/include -I/usr/local/include -Lxml2/bin -lsbml -lxml2 -lm -L/usr/lib -L/usr/local/lib -o helloworld.so helloworld_wrap.o helloworld.o -L"." -L"/usr/lib" -L.   -Wl,--enable-auto-image-base,--enable-auto-import,--export-all   -lruby -lsupc++  -ldl -lcrypt 

helloworld.o: In function `_ZNSt8multimapIiiSt4lessIiESaISt4pairIKiiEEED1Ev':
/home/mathieu/ASDABP/helloworld.cpp:(.text+0xd): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::size() const'
/home/mathieu/ASDABP/helloworld.cpp:(.text+0x60): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned int) const'
/home/mathieu/ASDABP/helloworld.cpp:(.text+0x9f): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned int) const'
/home/mathieu/ASDABP/helloworld.cpp:(.text+0xce): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned int) const'
helloworld.o: In function `main':
/home/mathieu/ASDABP/helloworld.cpp:656: undefined reference to `_readSBML'
/home/mathieu/ASDABP/helloworld.cpp:658: undefined reference to `SBMLDocument::getNumErrors() const'
/home/mathieu/ASDABP/helloworld.cpp:662: undefined reference to `std::cerr'
/home/mathieu/ASDABP/helloworld.cpp:662: undefined reference to `SBMLDocument::printErrors(std::basic_ostream<char, std::char_traits<char> >&) const'
helloworld.o: In function `_Z41__static_initialization_and_destruction_0ii':
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/iostream:77: undefined reference to `std::ios_base::Init::Init()'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/iostream:77: undefined reference to `std::ios_base::Init::~Init()'
helloworld.o: In function `_ZNSt8multimapIiiSt4lessIiESaISt4pairIKiiEEED1Ev':
/home/mathieu/ASDABP/helloworld.cpp:(.text$_ZNSt17_Rb_tree_iteratorISt4pairIK8Node_key4NodeEEppEi[std::_Rb_tree_iterator<std::pair<Node_key const, Node> >::operator++(int)]+0x1b): undefined reference to `std::_Rb_tree_increment(std::_Rb_tree_node_base*)'
/home/mathieu/ASDABP/helloworld.cpp:(.text$_ZNSt17_Rb_tree_iteratorISt4pairIK8Node_key4NodeEEppEv[std::_Rb_tree_iterator<std::pair<Node_key const, Node> >::operator++()]+0x13): undefined reference to `std::_Rb_tree_increment(std::_Rb_tree_node_base*)'
helloworld.o: In function `_ZN10ExperimentC1Ev':
/home/mathieu/ASDABP/helloworld.cpp:78: undefined reference to `std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)'
helloworld.o: In function `_ZNSt8multimapIiiSt4lessIiESaISt4pairIKiiEEED1Ev':
/home/mathieu/ASDABP/helloworld.cpp:(.text$_ZNSt17_Rb_tree_iteratorISt4pairIK8Node_key4NodeEEmmEv[std::_Rb_tree_iterator<std::pair<Node_key const, Node> >::operator--()]+0x13): undefined reference to `std::_Rb_tree_decrement(std::_Rb_tree_node_base*)'
collect2: ld returned 1 exit status
make: *** [helloworld.so] Error 1
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
18 juin 2008 à 09:33
essai d'utiliser g++ plutôt que gcc pour l'édition des liens.
tu ne met pas comment tu compile helloworld.cpp
est-tu sur que c'est comme ça que l'on fait une bibliothèque dynamique ? (regarde là : http://www.commentcamarche.net/forum/affich 1881407 comment creer librairie partagee so linux)
0
@xi@g@me Messages postés 68 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 25 septembre 2018 4
20 juin 2008 à 04:44
salut char snipeur, ca fait plaisir d'avoir enfin une réponse...
helloworld.cpp est compilé de la même manière mais n'était pas modifié quand j'ai recompilé, d'où son absence...
en fait, le makefile est généré par ruby, et le helloworld_wrap.cpp par swigwin, car le but de la librairie est d'être utilisée par ruby. j'ai config ruby pour générer des commandes pour C++ (j'ai réussi a compiler un bon paquet de fois déjà avant qu'il foire comme ca), et les drapeaux en plus dans le gcc -shared comme par exemple "-L/usr/local/bin" on été rajoutés par un petit programme que j'ai créé a la main.
Je vais jeter un coup d'oeil sur le lien mais le makefile étant trop compliqué je doute pouvoir le modifier d'avantage a la main...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
20 juin 2008 à 08:49
Bon, déjà, le problème ne viens que de l'édition des liens. Et en effet il ne semble pas trouver la lib standard du C++.
Dans le man gcc, je n'ai pas trouver l'option "-s", que "-S" qui n'assemble pas le code : cause possible de l'erreur ?
Fait une recherche sur ton disque dur pour savoir où se trouve les "libstdc++.*" Peut être manque t'elles.
0
@xi@g@me Messages postés 68 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 25 septembre 2018 4
23 juin 2008 à 04:45
salut char snipeur, il semblerait en effet que le manque de libc++ soit la cause du problème. j'ai regardé le extconf.rb qui permet de faire le makefile, et en argument de la fonction append_library il y avait supc++. Je l'ai remplacé par stdc++ et cela semble marcher.

il me reste les erreurs de SBML à corriger... (les headers et les libs existent car j'arrive a compiler quand je ne fais pas de lib dynamique pour ruby)

helloworld.o: In function `main':
/home/mathieu/ASDABP/helloworld.cpp:1042: undefined reference to `_readSBML'
/home/mathieu/ASDABP/helloworld.cpp:1043: undefined reference to `SBMLDocument::getNumErrors() const'
/home/mathieu/ASDABP/helloworld.cpp:1045: undefined reference to `SBMLDocument::printErrors(std::basic_ostream<char, std::char_traits<char> >&) const'
collect2: ld returned 1 exit status
make: *** [helloworld.so] Error 1


merci encore du tuyau :)
0