• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Link-Probleme unter SUSE 10.1-x86_64 und KDevelop 3.3.1

sschmidt

Newbie
Hallo,

wenn ich ein qmake-basiertes Projekt kompilieren möchte, dann kommt folgende Fehlermeldung:

cd '/home/sschmidt/Develop/testqmake' && QTDIR="/usr/lib/qt3" gmake -k
cd src && gmake -f Makefile
test -d ../bin/ || mkdir -p ../bin/
g++ -o ../bin/testqmake testqmake.o main.o moc_testqmake.o -L/usr/lib64/ -L/usr/lib/qt3/lib64/ -L/usr/X11R6/lib64/ -lqt-mt -lXext -lX11 -lm -lpthread
/usr/lib64/gcc/x86_64-suse-linux/4.1.0/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib/libpthread.so when searching for -lpthread
/usr/lib64/gcc/x86_64-suse-linux/4.1.0/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib/libpthread.a when searching for -lpthread
/usr/lib64/gcc/x86_64-suse-linux/4.1.0/../../../../x86_64-suse-linux/bin/ld: cannot find -lpthread
collect2: ld returned 1 exit status
gmake[1]: *** [../bin/testqmake] Fehler 1
gmake[1]: Das Target »first« wurde wegen Fehlern nicht aktualisiert.
gmake: *** [sub-src] Fehler 2
gmake: Das Target »first« wurde wegen Fehlern nicht aktualisiert.
*** Beendet mit Status: 2 ***


Die glic ist aber korrekt installiert worden, so dass ich hier auf dem Schlauch stehe. Weiß jemand Rat?

Besten Dank und Gruß,
Sven Schmidt
 
Hast Du einen Symlink namens libpthread.so im Verzeichnis /usr/lib64:
Code:
ls -l /usr/lib64/libpthread.so
Ist die glibc vollständig (d.h. nicht nur die 32-Bit-Version) installiert worden:
Code:
rpm -qa | grep glibc
 
OP
S

sschmidt

Newbie
Danke für die Antwort.
Im Verzeichnis /usr/lib64 gibt es nichts mit libpthread, aber im Verzeichnis /usr/lib.

sschmidt@linux-sven:~> rpm -qa | grep glibc
glibc-32bit-2.4-30
glibc-devel-2.4-31
glibc-2.4-25
glibc-locale-2.4-25
glibc-i18ndata-2.4-25
glibc-locale-32bit-2.4-25

Hilft das?
Ist wirklich komisch, denn das sollte nun wirklich out-of-the-box funktionieren.

Danke, Sven


Edit:

sschmidt@linux-sven:~> ls -l /usr/lib/libpth*
-rw-r--r-- 1 root root 228778 2006-05-07 19:13 /usr/lib/libpthread.a
-rw-r--r-- 1 root root 1400 2006-05-07 19:13 /usr/lib/libpthread_nonshared.a
-rw-r--r-- 1 root root 216 2006-05-07 19:13 /usr/lib/libpthread.so
 
sschmidt schrieb:
Ist wirklich komisch, denn das sollte nun wirklich out-of-the-box funktionieren.
Nein, ganz so einfach ist es nicht auf einem System, das 64-Bit und 32-Bit zur gleichen Zeit ist. Und auch ganz allgemein empfehle ich, sich schon mal darauf einzustellen, dass man unter Linux des öfteren mal was nachinstallieren muss, was standardmäßig nicht installiert ist, insbesondere wenn es um Entwicklerpakete geht.

Also: Die Bibliotheken in /usr/lib helfen nicht weiter, weil das die 32-Bit-Versionen sind, Du versuchst aber gerade eine 64-Bit-Anwendung zu linken, deswegen passt die 32-Bit-Version da nicht dazu und wird übersprungen. Für Deine Aktion brauchst Du die 64-Bit-Version der libpthread.so im Verzeichnis /usr/lib64.

Diese befindet sich im Paket "glibc-devel", das eigentlich installiert ist, aber Du hast da offenbar einen Mix gemacht und die 32-Bit-Version von glibc-devel installiert. Du solltest nämlich eigentlich gar keine libpthread.so in /usr/lib haben.

Also bitte nochmal diese Angaben liefern:
Code:
rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | grep glibc
Sollte da zufällig sowas hier:
Code:
glibc-devel-2.4-31.i686
drin auftauchen, dann muss das weg, denn Du brauchst statt des i686-Pakets das x86_64-Paket.

PS: Benutzt Du apt?
 
OP
S

sschmidt

Newbie
Hi,

danke für die Antwort.
Also:

Code:
linux-sven:/home/sschmidt # rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | grep glibc
glibc-32bit-2.4-30.x86_64
glibc-devel-32bit-2.4-25.x86_64
glibc-devel-2.4-31.i686
glibc-2.4-25.x86_64
glibc-locale-2.4-25.x86_64
glibc-i18ndata-2.4-25.x86_64
glibc-locale-32bit-2.4-25.x86_64

Also doch eine glibc-devel für i686. Wenn ich die deinstallieren möchte, also
Code:
linux-sven:/home/sschmidt # apt-get remove glibc-devel
Lese Paketlisten... Fertig
Erzeuge Abhängigkeitsbaum... Fertig
Die folgenden Pakete werden ENTFERNT:
  Mesa-devel alsa-devel arts-devel dbus-1-devel dbus-1-qt3-devel fam-devel fontconfig-devel freeglut-devel gcc gcc-c++
  glib2-devel glibc-devel glibc-devel-32bit kdebase3-devel kdelibs3-devel kdelibs3-devel-doc kdevelop3 libstdc++-devel
  libtiff-devel libvorbis-devel libxslt-devel pcre-devel qt3-devel qt3-devel-doc qt3-devel-tools xorg-x11-devel
0 upgraded, 0 newly installed, 26 entfernt und 3 nicht upgegradet.
Muss 0B an Archiven holen.
Nach dem Auspacken werden 528MB Plattenplatz freigegeben werden.
Wollen Sie fortsetzen? [J/n] n
Abgebrochen.
linux-sven:/home/sschmidt #
, dann werden wohl zu viele wichtige Pakete deinstalliert.
Komisch, die relevanten Dateien als glibc.x86_64 sollten doch automatisch nach /usr/lib64 installiert werden.

Und ja, ich benutze einen Mix aus apt und smart.

Mit out-of-the-box meinte ich, dass das unter SuSE 10.0 keine Schwierigkeiten machte.


Besten Dank, Sven

Edit:

Die 64-Bit-Bibliotheken liegen in /lib64 statt /usr/lib64. Wenn ich nun symlinks zu libpthread, libm, libc setze, dann erscheint die Meldung
Code:
sschmidt@linux-sven:~/Develop/testqmake> make
cd src && make -f Makefile
make[1]: Entering directory `/home/sschmidt/Develop/testqmake/src'
test -d ../bin/ || mkdir -p ../bin/
g++  -o ../bin/testqmake testqmake.o main.o moc_testqmake.o   -L/usr/lib64/ -L/usr/lib/qt3/lib64/ -L/usr/X11R6/lib64/ -lqt-mt -lXext -lX11 -lm -lpthread
/usr/lib64/gcc/x86_64-suse-linux/4.1.0/../../../../x86_64-suse-linux/bin/ld: warning: i386 architecture of input file `/usr/lib/crt1.o' is incompatible with i386:x86-64 output
/usr/lib64/gcc/x86_64-suse-linux/4.1.0/../../../../x86_64-suse-linux/bin/ld: warning: i386 architecture of input file `/usr/lib/crti.o' is incompatible with i386:x86-64 output
/usr/lib64/gcc/x86_64-suse-linux/4.1.0/../../../../x86_64-suse-linux/bin/ld: warning: i386 architecture of input file `/usr/lib/crtn.o' is incompatible with i386:x86-64 output
/usr/lib/crt1.o: In function `_start':
init.c:(.text+0xc): undefined reference to `__libc_csu_fini'
init.c:(.text+0x11): undefined reference to `__libc_csu_init'
collect2: ld returned 1 exit status
make[1]: *** [../bin/testqmake] Fehler 1
make[1]: Leaving directory `/home/sschmidt/Develop/testqmake/src'
make: *** [sub-src] Fehler 2

Hier wird wohl tatsächlich versucht, 32- und 64Bit zu mischen.
 
Lös das Problem mal ohne apt und ohne smart.

Schuld am Problem ist wirklich dieses Paket hier;
Code:
glibc-devel-2.4-31.i686
Weg damit, auf die harte Tour:
Code:
rpm -e glibc-devel --nodeps
Und dann die richtige Version drauf:
Code:
rpm -Uvh ftp://suse.inode.at/opensuse/distribution/SL-10.1/inst-source/suse/x86_64/glibc-devel-2.4-25.x86_64.rpm
Hinweis: Das Paket "glibc-32bit" ist OK, an dem liegt es nicht und es darf (und soll oder muss sogar) bleiben.

Was apt angeht: apt kommt mit gemischten i686/x86_64-Repositories nicht richtig klar, es wurde für Debian entwickelt, da gibt es sowas einfach nicht, bei SUSE (und Fedora, und Mandriva, und vielen anderen) aber sehr wohl. apt "denkt" aufgrund der Versionsnummer, dass die i686-Version neuer ist und installiert diese, weil es nicht "weiß", dass es gefälligst trotz der Versionsnummer die x86_64-Version zu bevorzugen hat. Deswegen ist es empfehlenswert, dass man, wenn man apt auf einem x86_64-System benutzt, die i686-Repositories rausnimmt. Mit smart sollte es das Problem nicht geben.
sschmidt schrieb:
Komisch, die relevanten Dateien als glibc.x86_64 sollten doch automatisch nach /usr/lib64 installiert werden.
Nein, das Paket glibc.x86_64 enthält nur die Laufzeit-Bibliotheken und nicht die Dateien, die man zum kompilieren und Linken braucht. Die stecken im Paket glibc-devel.x86_64, aber im Moment läuft es deshalb nicht, weil Du glibc-devel.i686 statt glibc-devel.x86_64 hast.

PS: Gerade sehe ich Deinen Edit. Mach bitte unbedingt die selbst gesetzten Symlinks wieder weg! Am besten sofort, solange Du noch weißt, welche Du selbst gesetzt hast und welche von Paketen kommen. Sonst kann es passieren, dass Du am Ende gar nichts mehr kompilieren kannst.
 
OP
S

sschmidt

Newbie
Hallo traffic,

der Link hat das Problem gelöst, danke!!!
Ich muss nun noch herausfinden, wie es zu diesem Problem kommen konnte.

Herzlichen Dank nochmals!

Sven
 
Oben