[C++] Pb de link avec VTK4.2.2 et la STL - undefined reference !!

Pb de link avec VTK4.2.2 et la STL - undefined reference !! [C++] - C++ - Programmation

Marsh Posté le 13-04-2006 à 10:43:35    

Bonjour :hello:
 
 
Je n'arrive pas à faire le link de mon programme avec la lib VTK4.2.2 que j'ai moi-même compilée sous Linux noyau 2.6. Voilà le message d'erreur:
 


/home/quickview/OPNSRC/VTK-4.2.2/Linux2.6.9-22.EL/bin/libvtkCommon.a(vtkInterpolatedVelocityField.o)(.gnu.linkonce.t._ZNSt14__simple_allocIP10vtkDataSetSt24__default_alloc_templateILb1ELi0EEE10deallocateEPS1_j+0x1d): In function `std::__simple_alloc<vtkDataSet*, std::__default_alloc_template<true, 0> >::deallocate(vtkDataSet**, unsigned int)':
: undefined reference to `std::__default_alloc_template<true, 0>::deallocate(void*, unsigned int)'
/home/quickview/OPNSRC/VTK-4.2.2/Linux2.6.9-22.EL/bin/libvtkCommon.a(vtkInterpolatedVelocityField.o)(.gnu.linkonce.t._ZNSt14__simple_allocIP10vtkDataSetSt24__default_alloc_templateILb1ELi0EEE8allocateEj+0x1d): In function `std::__simple_alloc<vtkDataSet*, std::__default_alloc_template<true, 0> >::allocate(unsigned int)':
: undefined reference to `std::__default_alloc_template<true, 0>::allocate(unsigned int)'
collect2: ld returned 1 exit status
make[2]: *** [/home/quickview/dev/sftvqvui_7.4.1/quickview/Linux2.6.9-22.EL/bin/qvtrace] Error 1
make[2]: Leaving directory `/home/quickview/dev/sftvqvui_7.4.1/quickview/src'
make[1]: *** [qvtrace] Error 2
make[1]: Leaving directory `/home/quickview/dev/sftvqvui_7.4.1/quickview/src'
make: *** [qvtrace] Error 2


 
:mmmfff:
 
g++ --version
g++ (GCC) 3.4.4 20050721 (Red Hat 3.4.4-2)
 
 
Je ne sais pas trop ce qui est en cause... Merci si vous avez une idée :)


Message édité par kaloskagatos le 13-04-2006 à 11:40:01

---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 13-04-2006 à 10:43:35   

Reply

Marsh Posté le 13-04-2006 à 11:50:03    

Si ça peut aider:
 
$cat /etc/redhat-release  
Red Hat Enterprise Linux WS release 4 (Nahant Update 2)
 
 
$ uname -a
Linux lindyn02 2.6.9-22.EL #1 Mon Sep 19 18:20:28 EDT 2005 i686 i686 i386 GNU/Linux


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 13-04-2006 à 12:02:55    

Je pense que c'est peut-être un problème de version gcc ou libstl mais je ne sais pas trop quoi tenter...


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 13-04-2006 à 14:15:05    

t'as compiler ton vtk en statique déjà ? pourquoi ? tu l'as compilé exactement dans le même environnement ? t'as validé ton vtk avec des programmes de tests ?
 
pas d'erreur/warning de compilation ?

Reply

Marsh Posté le 13-04-2006 à 15:46:11    

effectivement j'ai deux libstdc++ :
 

lindyn02:/home/quickview/OPNSRC/VTK-4.2.2/Linux2.6.9-22.EL$ ls -l /usr/lib/libstdc++*
-rwxr-xr-x  1 root root 258288 Dec 14  2004 /usr/lib/libstdc++-2-libc6.1-1-2.9.0.so
-rwxr-xr-x  1 root root 268428 Dec 14  2004 /usr/lib/libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx  1 root root     30 Mar 22 11:47 /usr/lib/libstdc++-libc6.1-1.so.2 -> libstdc++-2-libc6.1-1-2.9.0.so
lrwxrwxrwx  1 root root     31 Mar 22 11:47 /usr/lib/libstdc++-libc6.2-2.so.3 -> libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx  1 root root     18 Mar 22 11:39 /usr/lib/libstdc++.so.5 -> libstdc++.so.5.0.7
-rwxr-xr-x  1 root root 733488 Dec  1  2004 /usr/lib/libstdc++.so.5.0.7
lrwxrwxrwx  1 root root     18 Mar 22 11:37 /usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.3
-rwxr-xr-x  1 root root 804288 Jul 25  2005 /usr/lib/libstdc++.so.6.0.3


 
 
J'ai tenté de recompiler VTK en lib dynamique, quelques libs qui sont générées mais à un moment ça part en vrille. Si je fais ldd un des .so générés j'obtiens :
 

lindyn02:/home/quickview/OPNSRC/VTK-4.2.2/Linux2.6.9-22.EL$ ldd bin/libvtkCommon.so
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00af4000)
        libdl.so.2 => /lib/libdl.so.2 (0x00111000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00115000)
        libm.so.6 => /lib/tls/libm.so.6 (0x00f1a000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x008ba000)
        libc.so.6 => /lib/tls/libc.so.6 (0x001e0000)
        /lib/ld-linux.so.2 (0x003ff000)  
lindyn02:/home/quickview/OPNSRC/VTK-4.2.2/Linux2.6.9-22.EL$ ls -l /usr/lib/libstdc++.so.6 lrwxrwxrwx  1 root root 18 Mar 22 11:37 /usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.3


 
 
 
 
Sino les erreurs à la génération de VTK en .so sont là, je vais chercher comment résoudre ça.
 


In file included from /usr/lib/gcc/i386-redhat-linux/3.4.4/../../../../include/c++/3.4.4/backward/strstream:51,
(...)
                 from /home/quickview/OPNSRC/VTK-4.2.2/IO/vtkBMPReader.cxx:18:
 
/usr/lib/gcc/i386-redhat-linux/3.4.4/../../../../include/c++/3.4.4/backward/backward_warning.h:32:2:
 
(...)
 
 
/home/quickview/OPNSRC/VTK-4.2.2/IO/vtkBMPReader.cxx: In function `void vtkBMPReaderUpdate2(vtkBMPReader*, vtkImageData*, OT*) [with OT = double]':
/home/quickview/OPNSRC/VTK-4.2.2/IO/vtkBMPReader.cxx:545:   instantiated from here
/home/quickview/OPNSRC/VTK-4.2.2/IO/vtkBMPReader.cxx:507: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
/usr/lib/gcc/i386-redhat-linux/3.4.4/../../../../include/c++/3.4.4/bits/postypes.h:176: note: candidate 1: std::fpos<_StateT> std::fpos<_StateT>::operator+(std::streamoff) const [with _StateT = mbstate_t]
/home/quickview/OPNSRC/VTK-4.2.2/IO/vtkBMPReader.cxx:507: note: candidate 2: operator+(std::streamoff, long int) <built-in>
/home/quickview/OPNSRC/VTK-4.2.2/IO/vtkBMPReader.cxx:545:   instantiated from here
 
 
(...)


Message édité par kaloskagatos le 13-04-2006 à 15:47:20

---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 13-04-2006 à 16:10:48    

bah ça a jamais pu compiler avant, je compreds pas ... faut que tu patchs :)

Reply

Marsh Posté le 13-04-2006 à 16:21:00    

ha bein si ça compilait en statique... mais j'ai trouvé la solution sur le net, faut effectivement patcher... Bon ça continue de compiler, je poste l'info si ça intéresse des gens...
 
 

Solution:
 
Open file vtkBMPReader.cxx in your VTK source directory and replace both old lines (O) by the new ones (N):
 
(O)      self->GetFile()->seekg(self->GetFile()->tellg() + streamSkip0, ios::beg);
(N)      self->GetFile()->seekg(static_cast<long>(self->GetFile()->tellg()) + streamSkip0, ios::beg);
 
 
(O)    self->GetFile()->seekg(self->GetFile()->tellg() + streamSkip1, ios::beg);
(N)    self->GetFile()->seekg(static_cast<long>(self->GetFile()->tellg()) +  streamSkip1, ios::beg);
 
 
Open file vtkImageReader.cxx in your VTK source directory and replace both old lines (O) by the new ones (N):
 
(O) this->File->seekg((long)streamStart, ios::beg);
(N) this->File->seekg(static_cast<long>(streamStart), ios::beg);
 
(O) self->GetFile()->seekg(self->GetFile()->tellg() + streamSkip0, ios::beg);
(N) self->GetFile()->seekg(static_cast<long>(self->GetFile()->tellg()) + streamSkip0, ios::beg);
 
(O) self->GetFile()->seekg(self->GetFile()->tellg() + streamSkip1 + correction,
(N) self->GetFile()->seekg(static_cast<long>(self->GetFile()->tellg()) + streamSkip1 + correction,


 
http://www.rz.uni-karlsruhe.de/rd/5427.php


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 13-04-2006 à 17:30:38    

Ca marche avec les lib dynamiques thx :)


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed