32-Bit libmysqlclient auf AMD64

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Methos25
Beiträge: 19
Registriert: 24.08.2005 14:24:23
Wohnort: nähe Heidelberg
Kontaktdaten:

32-Bit libmysqlclient auf AMD64

Beitrag von Methos25 » 21.04.2006 15:44:07

Hi,

ich weiß nicht ob ich hier so ganz richtig bin, aber das Topic sagt etwas von Programmiersprachen, also poste ich einfach mal :wink:

Es geht um folgendes:

Ich bin mit einer kleinen Internetcommunity auf einen neuen Server umgezogen. Ein AMD64 wie der Titel schon verrät. Auf dieser Maschine möchte ich ein Stück Software laufen lassen, die auf dem alten Rechner lief und für unsere Community essentiell ist. Konkret geht es um die NWNX Schnittstelle zu Neverwinter Nights falls das jemandem etwas sagt.

Mein Problem:

NWNX lässt sich auf dem 64-Bit-System nicht - zumindest nicht ohne weiteres- kompilieren.
Ein versuch den Code auf gegen 64-Bit zu compilieren ist gescheitert, da in der ./configure an mehreren Stellen der Flag CFLAGS='-march=i386' gesetzt wird.

Ich habe also folgendes versucht:

Code: Alles auswählen

export CC='gcc-3.4 -m32 -L/usr/lib32'
export CXX=g++-3.4 -m32 -L/usr/lib32'
./configure
Bis hier hin läuft alles Prima durch!

Nun aber:

Code: Alles auswählen

s15204584:/home/games/nwn/linnwnx2# make install
g++-3.4 -m32 -L/usr/lib32  -march=i386   -c -o nwnx2lib.o nwnx2lib.cpp
g++-3.4 -m32 -L/usr/lib32  -march=i386   -c -o NWNXBase.o NWNXBase.cpp
g++-3.4 -m32 -L/usr/lib32  -march=i386   -c -o gline.o gline.cpp
g++-3.4 -m32 -L/usr/lib32 -w -fPIC -shared -W -Wall  -o nwnx2.so nwnx2lib.o NWNXBase.o gline.o -ldl -DHAVE_CONFIG_H
make -C db
make[1]: Entering directory `/home/games/nwn/linnwnx2/db'
g++-3.4 -m32 -L/usr/lib32  -march=i386  -I..  -c -o NWNXmysql.o NWNXmysql.cpp
g++-3.4 -m32 -L/usr/lib32  -march=i386  -I..  -c -o plugin-mysql.o plugin-mysql.cpp
g++-3.4 -m32 -L/usr/lib32  -march=i386  -I..  -c -o data.o data.cpp
g++-3.4 -m32 -L/usr/lib32  -march=i386  -I..  -c -o dbmysql.o dbmysql.cpp
g++-3.4 -m32 -L/usr/lib32 -w -fPIC -shared -W -Wall  -o nwnx_odbc.so NWNXmysql.o plugin-mysql.o data.o dbmysql.o -L/usr/lib/mysql -lmysqlclient -lz -DHAVE_CONFIG_H
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/3.4.6/../../../libmysqlclient.so when searching for -lmysqlclient
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/3.4.6/../../../libmysqlclient.a when searching for -lmysqlclient
/usr/bin/ld: skipping incompatible /usr/bin/../lib/libmysqlclient.so when searching for -lmysqlclient
/usr/bin/ld: skipping incompatible /usr/bin/../lib/libmysqlclient.a when searching for -lmysqlclient
/usr/bin/ld: skipping incompatible /usr/lib/libmysqlclient.so when searching for -lmysqlclient
/usr/bin/ld: skipping incompatible /usr/lib/libmysqlclient.a when searching for -lmysqlclient
/usr/bin/ld: cannot find -lmysqlclient
collect2: ld returned 1 exit status
make[1]: *** [nwnx_odbc.so] Error 1
make[1]: Leaving directory `/home/games/nwn/linnwnx2/db'
make: *** [db] Error 2

Die Fehlermeldung verweist ja auf fehlende 32-bit mysqlclient-libraries.

Meine Frage ist nun, wie bzw. wo ich diese finden kann. Als deb-Pakete habe ich nichts dergleichen gefunden.
Selbst bauen? Wenn ja dann wie? Oder gibt es einen anderen Weg diesen Code zum compilieren zu bewegen? Ich gebe zu, mehr als ein Laie auf diesem Gebiet zu sein.

Über Hilfestellung hierzu würde ich mich freuen.



BTW: Noch eine kleine Anmerkung:
Nach installation der Pakete ia32-libs und ia32-libs.dev waren gut die hälfte der Links in /usr/lib32 kaputt, da sie auf emul/... und nicht /emul/... verwiesen. Ich habe das von Hand geradegegoben. Nichtdestotrotz scheint mir das ein major bug zu sein, und ich würde gerne wissen wo man soetwas reporten kann?


Mit freundlichen Grüßen
Markus

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 21.04.2006 20:48:22

Willkommen im Forum !
Methos25 hat geschrieben:Nichtdestotrotz scheint mir das ein major bug zu sein, und ich würde gerne wissen wo man soetwas reporten kann?
Bugreports kannst du hier abgeben:
http://www.debian.org/Bugs/

Zu deinem Problem:
Die Sourcen solltest du ganz normal mit "apt-get source libmysqlclient<version>" bekommen. (für <version> kannst du 10,12 oder 14 einsetzen).
Ansonsten kannst du sie auch hier herunterladen: http://www.debian.org/distrib/packages (nach dem Paket Suchen, vom Ergebnis das Paket auswählen und dann gibt es unten einen Link zum Source Paket.

zlib1g wirst du wahrscheinlich auch benötigen

Code: Alles auswählen

root@gms1:~# apt-cache depends libmysqlclient14
libmysqlclient14
  Hängt ab: mysql-common
  Hängt ab: libc6
  Hängt ab: zlib1g
Du könntest auch probieren eine libmysqlclient.a aus einem i386 Paket zu extrahieren und dann mit dieser statischen Library zu linken.

Gruß
gms

Methos25
Beiträge: 19
Registriert: 24.08.2005 14:24:23
Wohnort: nähe Heidelberg
Kontaktdaten:

Beitrag von Methos25 » 22.04.2006 05:19:09

Ich danke Dir gms für die schnelle Reaktion und das freundliche Willkommen.

Der Bugreport ist abgeschickt.

Bezüglich der Sourcen für libmysqlclient führte "apt-get source mysql-dfsg" zum Ziel. Der von dir vorgeschlagene Paket-Name funktioniert als source-Paket nicht. Nichts desto-trotz danke für den Tipp.

Mit den so erhaltenen Sourcen, dachte ich, könnte ich nun endlich meine 32-Bit mysqlclient library erzeugen. Pustekuchen! Ausführen des ./configure skripts verlangt "Linuxthreads" die mit dem amd64-port obsolet geworden sind und durch ntpl ersetzt wurden.
Ein Patch würde abhilfe verschaffen, doch dann hätte ich am Ende wohl 64-Bit-libraries gebaut und nichts gewonnen.

Ich habe einfach keine Lust mehr, meine Zeit damit zu verschwenden, diese Software zum funktionieren zu prügeln.
Ich werde jetzt versuchen, auf der AMD64-Maschine ein i368-Debian aufzusetzen, damit ich endlich ein System habe, dass sich verhält wie ich es gewohnt bin und bei dem ich mich nicht, mit der Dualität irgendwelcher Libs herumschlagen muss.

Meine künftigen Fragen in diesem Forum jedenfalls, werden sich in nächster Zeit nur noch mit dem Aufsetzen eines Grundsystem über Remote-Konsole beschäftigen. Natürlich an entsprechender Stelle.

Ich danke nocheinmal für die Hilfe bislang.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 22.04.2006 18:30:56

Methos25 hat geschrieben: Ich werde jetzt versuchen, auf der AMD64-Maschine ein i368-Debian aufzusetzen, damit ich endlich ein System habe, dass sich verhält wie ich es gewohnt bin und bei dem ich mich nicht, mit der Dualität irgendwelcher Libs herumschlagen muss.

Meine künftigen Fragen in diesem Forum jedenfalls, werden sich in nächster Zeit nur noch mit dem Aufsetzen eines Grundsystem über Remote-Konsole beschäftigen.
Ich würde dir folgendes empfehlen: "Using an IA32 chroot to run 32bit applications"
https://alioth.debian.org/docman/view.p ... howto.html

Gruß
gms

Methos25
Beiträge: 19
Registriert: 24.08.2005 14:24:23
Wohnort: nähe Heidelberg
Kontaktdaten:

Beitrag von Methos25 » 23.04.2006 15:41:03

Danke für den Tip, aber das ist mir ehrlich gesagt zu viel Aufwand.

Ich hab jetzt ein feines System gebastelt, dass mir mit "uname -m" den String "i686" zurückgibt, und bin sehr zufrieden damit.
Wie ich in irgend nem anderen Forum mal gelesen hab. "Ich ziehe die Stabilität und Vielfältigkeit von 10 Jahren Debian-Paket-Entwicklung im 32-Bit-Branch jederzeit vor."
Die AMD64-Pakete sollen in der Menge auch erst mal wachsen. Dann probier ich das vielleicht irgendwann nochmal.

Tschö und Danke nochmal

Antworten