g++ - "undefined reference" in precompiled shared object
Liebe Leute,
Seit einigen Tagen kämpfe ich mit folgendem Probem:
Ich versuche die dtsearch engine für Linux (full text index based
file search) zu installieren und kriege die test programme nicht
zum Laufen.
Was ich installiert habe:
SuSE Linux 7.1
Kernel 2.4.7
gcc-2.95.2
gcc-3.2 (installed manually to /usr/local/gcc-3.2)
den gcc-3.2 habe ich installiert da die search-engine library (libdtsearch.so)
mit diesem übersetzt wurde.
Bei dem demo-Programm ist ein Makefile dabei. Ich habe aber alle
g++ Aufrufe sequenziell in ein shellscript geschrieben um es einfacher zu machen
(die Fehler sind die gleichen).
Die sechs compiles gehen gut, der siebente Aufruf (link) bringt die unten stehenden
Fehlermeldungen.
Ich habe wirklich keine Ahnung mehr was da schief läuft, allerdings bin
ich leider absolut kein C-Guru.
mit der Bitte um Hilfe,
Vielen Dank,
Harald.
------------------
#!/bin/sh
export GPP=/usr/local/gcc-3.2/bin/g++
$GPP -I. -I../include -D__UNIX__ -DUnicodeText -Wno-deprecated -c
../common/dtsearch.cpp -o dtsearch.o
$GPP -I. -I../include -D__UNIX__ -DUnicodeText -Wno-deprecated -c
../common/dtsviewr.cpp -o dtsviewr.o
$GPP -I. -I../include -D__UNIX__ -DUnicodeText -Wno-deprecated -c
../common/settings.cpp -o settings.o
$GPP -I. -I../include -D__UNIX__ -DUnicodeText -Wno-deprecated -c
../common/xmlMaker.cpp -o xmlMaker.o
$GPP -I. -I../include -D__UNIX__ -DUnicodeText -Wno-deprecated -c
../common/dstring.cpp -o dstring.o
$GPP -I. -I../include -D__UNIX__ -DUnicodeText -Wno-deprecated -c
../common/dfile.cpp -o dfile.o
$GPP -I. -I../include -D__UNIX__ -DUnicodeText -Wno-deprecated -c
textdemo.cpp -o textdemo.o
$GPP -v -L/usr/local/gcc-3.2/lib -L../../../lib -ldtsearch -lstdc++
dtsearch.o dtsviewr.o settings.o xmlMaker.o dstring.o dfile.o textdemo.o -o
textdemo -D__UNIX__ -DUnicodeText -Wno-deprecated
------------------
../../../lib/libdtsearch.so: undefined reference to
`std::ostrstream::~ostrstream [in-charge]()@GLIBCPP_3.2'
../../../lib/libdtsearch.so: undefined reference to
`std::basic_ostream &, char)@GLIBCPP_3.2'
../../../lib/libdtsearch.so: undefined reference to
`__cxa_rethrow@CXXABI_1.2'
../../../lib/libdtsearch.so: undefined reference to
`std::basic_ostream collect2: ld returned 1 exit status
* Harald Meier (meh1@rts.at) [20040304 12:01]:
`std::ostrstream::~ostrstream [in-charge]()@GLIBCPP_3.2'
dtsearch wurde offenbar gegen eine neuere libstdc++ gelinkt (die vom gcc 3.2.X). Da ist dann ein update des gcc fällig. Den aber bitte nur aus einem passenden .src.rpm neu bauen, damit er zu deinem System passt. Philipp -- Philipp Thomas <pth AT suse PUNKT de> SUSE LINUX AG, Maxfeldstr. 5, D-90409 Nuremberg, Germany
Hallo Philip, Philip Thomas schrieb:
dtsearch wurde offenbar gegen eine neuere libstdc++ gelinkt (die vom gcc 3.2.X). Da ist dann ein update des gcc fällig. Den aber bitte nur aus einem passenden .src.rpm neu bauen, damit er zu deinem System passt.
muss ich wirklich den gcc updaten, gibt es keine Möglichkeit, den gcc 3.2.X in ein eigenes Verzeichniss zu installieren? Die Installation ist leider recht komplex, mit Oracle, VMware, selbst kompiliertem Kernel und so, da weiss ich nicht, ob nicht irgendwo side-effects auftreten wenn ich den gcc via rpm update. vielen Dank, Harald.
Am Donnerstag, 4. März 2004 11:53 schrieb Harald Meier:
Was ich installiert habe: SuSE Linux 7.1 Kernel 2.4.7 gcc-2.95.2 gcc-3.2 (installed manually to /usr/local/gcc-3.2)
den gcc-3.2 habe ich installiert da die search-engine library (libdtsearch.so) mit diesem übersetzt wurde.
Das kannst Du vergessen, entweder es sind alle C++Bibliotheken mit gcc 2.95.x oder 3.2 compiliert, ein mischen funktioniert nicht. Also entweder Du compilierst Dein halbes System neu, oder die libdtsearch.so mit dem alten gcc. Wenn man sich die Fehlermeldungen ansieht, wird Dir eh nur variante zwei bleiben, weils mit der glibc auch noch hakt. -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de
"Manfred Tremmel" wrote:
Das kannst Du vergessen, entweder es sind alle C++Bibliotheken mit gcc 2.95.x oder 3.2 compiliert, ein mischen funktioniert nicht. Also entweder Du compilierst Dein halbes System neu, oder die libdtsearch.so mit dem alten gcc. Wenn man sich die Fehlermeldungen ansieht, wird Dir eh nur variante zwei bleiben, weils mit der glibc auch noch hakt.
Danke für die Analyse! Leider habe ich den Source von libdtsearch.so nicht, der wird als binary ausgeliefert. Woran erkennst Du, dass es auch mit der glibc Probleme gibt? Gibt es eine Möglichkeit, auch die glibc parallel zur bestehenden zu installieren? Schönen Dank! Harald.
Am Montag, 8. März 2004 08:52 schrieb Harald Meier:
Leider habe ich den Source von libdtsearch.so nicht, der wird als binary ausgeliefert.
Ok, kurze google Suche, ist ne proprietäre BinOnly Geschichte.
Woran erkennst Du, dass es auch mit der glibc Probleme gibt?
Sorry, da muss ich zugeben, da hab ich mich verschaut, dass kann ich aus der Ausgabe nicht rauslesen, aber Du kannst es mal mit 'ldd /pfad/zur/libdtsearch.so' überprüfen.
Gibt es eine Möglichkeit, auch die glibc parallel zur bestehenden zu installieren?
Die glibc ist die Schnittstelle zwischen Anwendungen und dem Kernel, dass da zwei parallel problemlos laufen, halte ich für ausgeschlossen. Mit einem Update auf SuSE 8.2/9.0 würdest Du sicher den weniger steinigen Weg wählen. -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de
Vielen Dank für die Tipps,
leider kann ich das System nicht updaten, da läuft Oracle und VMWare und
noch ein
paar andere Dinge drauf. Ausserdem ist das System (via Image) an die 50 mal
installiert.
Trotzdem herzlichen Dank,
Harald.
----- Original Message -----
From: "Philipp Thomas"
Manfred Tremmel
[Mo, 8.3.2004 22:44:09 +0100]: Mit einem Update auf SuSE 8.2/9.0 würdest Du sicher den weniger steinigen Weg wählen.
Aber deutlichst, wenn ich das so falsch mal sagen darf :)
Philipp
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Manfred Tremmel schrieb:
Sorry, da muss ich zugeben, da hab ich mich verschaut, dass kann ich aus der Ausgabe nicht rauslesen, aber Du kannst es mal mit 'ldd /pfad/zur/libdtsearch.so' überprüfen.
ich habe folgendes getan: export LD_LIBRARY_PATH=/usr/local/gcc-3.2/lib ldd -v libdtsearch.so.6.0 und die Ausgabe ist folgende: ./libdtsearch.so.6.0: /usr/local/gcc-3.2/lib/libstdc++.so.5: no version information available (required by ./libdtsearch.so.6.0) ./libdtsearch.so.6.0: /usr/local/gcc-3.2/lib/libstdc++.so.5: no version information available (required by ./libdtsearch.so.6.0) libstdc++.so.5 => /usr/local/gcc-3.2/lib/libstdc++.so.5 (0x402f0000) libm.so.6 => /lib/libm.so.6 (0x403b5000) libgcc_s.so.1 => /usr/local/gcc-3.2/lib/libgcc_s.so.1 (0x403d3000) libc.so.6 => /lib/libc.so.6 (0x403dc000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000) Version information: ./libdtsearch.so.6.0: libm.so.6 (GLIBC_2.0) => /lib/libm.so.6 libgcc_s.so.1 (GCC_3.0) => /usr/local/gcc-3.2/lib/libgcc_s.so.1 libgcc_s.so.1 (GLIBC_2.0) => /usr/local/gcc-3.2/lib/libgcc_s.so.1 libc.so.6 (GLIBC_2.1) => /lib/libc.so.6 libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6 libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 libstdc++.so.5 (CXXABI_1.2) => not found libstdc++.so.5 (GLIBCPP_3.2) => not found /usr/local/gcc-3.2/lib/libstdc++.so.5: libgcc_s.so.1 (GCC_3.0) => /usr/local/gcc-3.2/lib/libgcc_s.so.1 libc.so.6 (GLIBC_2.2) => /lib/libc.so.6 libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6 libc.so.6 (GLIBC_2.1) => /lib/libc.so.6 libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 /lib/libm.so.6: libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 /usr/local/gcc-3.2/lib/libgcc_s.so.1: libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6 libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 /lib/libc.so.6: ld-linux.so.2 (GLIBC_2.1.1) => /lib/ld-linux.so.2 ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2 ld-linux.so.2 (GLIBC_2.2) => /lib/ld-linux.so.2 ld-linux.so.2 (GLIBC_2.0) => /lib/ld-linux.so.2 ist das mit der "version information" ein problem? warum findet er libstdc++.so.5 nicht wenn er doch libgcc_s findet? oder deute ich das falsch? Vielen Dank für die Mühe! Harald.
participants (4)
-
Harald Meier
-
Manfred Tremmel
-
Philipp Thomas
-
Philipp Thomas