PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Crosscomp meckert über fehlende libstdc++.so.6



7.e.Q
09-03-2007, 10:00
Hi Leute,

wir nutzen eine Crosscompiler Umgebung, um unsere Software auf Windows Systemen für Linux zu kompilieren. Funktioniert auch wunderbar. Nun haben wir aber eine Bibliothek hier, die uns leider nicht als Source zur Verfügung steht. Diese wurde unter Linux mit einem GCC ebenfalls in Version 3, allerdings einer anderen Minor übersetzt und gelinkt.

Jetzt beschwert sich der GCC, den wir einsetzen (v3.3.6), beim Linken über eine fehlende libstdc++.so.6 (in der Crosscomp Umgebung ist nur die libstdc++.so.5.0.7 vorhanden, samt zwei Symlinks ...c++.so.5 und ...c++.so):



\opt\crosstool\gcc-3.3.6-glibc-2.3.2\i386-unknown-linux-gnu\lib\gcc-lib\i386-unknown-linux-gnu\3.3.6\..\..\..\..\i386-unknown-linux-gnu\bin\ld: warning: libstdc++.so.6, needed by i:\[...]\librtpgen.so, not found (try using -rpath or -rpath-link)


Außerdem bekommen wir vom Linker die Fehlermeldung:



i:\[...]\librtpgen.so: undefined reference to `__gxx_personality_v0@CXXABI_1.3'


wobei librtpgen.so die besagte unter Linux übersetzte Lib ist, von der wir keinen Source haben.

Wie kriegen wir das in den Griff? Wie bekommen wir die Lib an unsere Software herangelinkt? Auf dem Zielsystem ist die ...c++.so.6 selbstverständlich vorhanden.

Danke

Grüße,
Hendrik

peschmae
09-03-2007, 12:09
Von GCC 3.3 nach 3.4 wurde die C++ ABI geändert. Ich vermute dass zu dem Zeitpunkt auch der Sprung von libstdc++.so.5 nach 6 gmeacht wurde.

Das CXXABI_1.3 tönt auch ein bisschen danach als ob es das wäre was Probleme macht.

Ich denke fast du brauchst einen GCC 3.4 damit du das Ganze zum laufen kriegst (oder neuer - soviel ich weiss ist die C++-ABI für alle bisherigen GCC >= 3.4 dieselbe).
Ob 1.3 die ABI der >=3.4er meint oder die der <= 3.3er weiss ich gerade nicht. Vermute mal die der >=3.4er

Disclaimer: Das ist nur meine wackelige Theorie basiert auf Dingen die mir mal im Laufe der Zeit irgendwo über den Weg gelaufen sind ;)

MfG Peschmä

7.e.Q
13-03-2007, 08:37
Okay, also das habe ich soweit hinbekommen. Das funktioniert nun. Musste ein paar Bibliotheken hin und her kopieren, aber es funktioniert. Ich kann kompilieren und linken.

Jetzt hab ich aber ein weiteres Problem mit einem kleinen Dreizeiler, den ich mal mit einer unserer Libs zum Test dynamisch zusammenlinken wollte. Irgendwie scheint ld die Lib nicht zu finden, obwohl sie sich definitiv im Suchpfad befindet. :eek:

Woran kann sowas liegen? Der relevante Ausschnitt:



[...]ygwin.o --output test_cygwin.out -L/cygdrive/i/Ists/mp2/media/V47/_media/lib/rtpgen -lrtpgen -lirf
/bin/ld: cannot find -lrtpgen
collect2: ld returned 1 exit status
make: *** [test_cygwin.out] Error 1
bash-3.1$ ls /cygdrive/i/Ists/mp2/media/V47/_media/lib/rtpgen
librtpgen.so rtp_lib.h user_stats.h
bash-3.1$


Danke

7.e.Q
13-03-2007, 11:11
Mist... falsche Compiler Chain verwendet... klar, daß es damit nicht geht. :p

Hab's hinbekommen.