probleme mit libc (version zu neu?)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
strummer
Beiträge: 11
Registriert: 11.12.2007 14:12:19

probleme mit libc (version zu neu?)

Beitrag von strummer » 14.02.2008 13:13:36

nachdem ich folgendes http://www.debianforum.de/forum/viewtopic.php?t=95862 gelöst habe, hab ich nun ein neues.

kurz es geht um ein programm welches in c geschrieben und unter suse 7.3 (kernel 2.4.14) kompiliert wurde. wenn ich das programm auf einem red hat el 4 (kernel 2.6.9) ausführe funktioniert alles. probiere ich das ganze unter etch (backported version von: http://kmuto.jp/debian/d-i/, kernel: 2.6.21) bekomme ich folgende fehlermeldung:

./wbi: relocation error: ./wbi: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference

libc-version auf etch ist 2.3.6
auf dem red hat system: 2.3.4
auf dem suse system: 2.2.4

gleich vorweg: ich möchte das programm, fall möglich, nicht neu kompilieren, weil es schon über sechs jahre alt ist, nicht von mir geschrieben ist und es zb die libcgi-bibliothek (http://libcgi.sourceforge.net/) verwendet, die ihrerseits beim kompilieren wieder probleme bereitet. zudem sind meine c-kenntnisse schon etwas eingrostet :oops:

update: ein nm /lib/libc.so.6 | grep 'A GLIBC' bringt mir ein nm: /lib/libc.so.6: no symbols

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

Re: probleme mit libc (version zu neu?)

Beitrag von gms » 14.02.2008 15:39:15

strummer hat geschrieben: update: ein nm /lib/libc.so.6 | grep 'A GLIBC' bringt mir ein nm: /lib/libc.so.6: no symbols
probiere "readelf -s /lib/libc.so.6", aber dort wirst du kein "errno@@GLIBC_2.0" finden

nachdem ich etwas faul bin, erlaube ich mir dir diesen Link zu posten:
http://en.wikipedia.org/wiki/Error_code

unter "A common coding error" findest du genau dieses Problem beschrieben

für weitere Fragen stehe ich natürlich gerne zur Verfügung

Gruß
gms

strummer
Beiträge: 11
Registriert: 11.12.2007 14:12:19

Re: probleme mit libc (version zu neu?)

Beitrag von strummer » 14.02.2008 17:00:43

gms hat geschrieben:probiere "readelf -s /lib/libc.so.6", aber dort wirst du kein "errno@@GLIBC_2.0" finden

nachdem ich etwas faul bin, erlaube ich mir dir diesen Link zu posten:
http://en.wikipedia.org/wiki/Error_code

unter "A common coding error" findest du genau dieses Problem beschrieben

für weitere Fragen stehe ich natürlich gerne zur Verfügung

Gruß
gms
vielen danke für deine antwort. das hilft mir schon weiter. das erklärt nun auch warums mit glibc 2.3.4 funktioniert. dort kommt nächmlich ein. Incorrectly built binary which accesses errno or h_errno directly. Needs to be fixed.

tja, nun eine vielleicht etwa dumme frage, aber wie gesagt, meine c-zeiten sind schon einige zeit vorbei: wie ich aus dem wiki-artikel entnehmen kann soll ich alle extern int errno durch das include ersetzten. nur finde ich bei mir nirgend wo ein extern int erno. muss ich jetzt trotzdem in jedem file das include hinzufügen

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

Re: probleme mit libc (version zu neu?)

Beitrag von gms » 14.02.2008 17:07:58

strummer hat geschrieben:muss ich jetzt trotzdem in jedem file das include hinzufügen
nein, aber vermutlich liegt dann der Fehler in einer der verwendeten Libraries ( "libcgi" etc )

Gruß
gms

edit:
Also die 1.0 er Version der libcgi hat kein Problem mit errno
strummer hat geschrieben:weil es schon über sechs jahre alt ist, nicht von mir geschrieben ist und es zb die libcgi-bibliothek (http://libcgi.sourceforge.net/) verwendet, die ihrerseits beim kompilieren wieder probleme bereitet.
Mit etwas angepaßten Parametern hat es bei mir geklappt:

Code: Alles auswählen

gms2 libcgi-1.0 # make CFLAGS="-m32 -fPIC" SHAREDOPT="-shared -m32"
cc -m32 -fPIC   -c -o src/error.o src/error.c
...( gekürzt )
cc -m32 -fPIC   -c -o src/cookie.o src/cookie.c
ar rc src/libcgi.a src/error.o src/cgi.o src/session.o src/base64.o src/md5.o src/string.o src/general.o src/list.o src/cookie.o
cc -shared -m32 -o src/libcgi.so src/error.o src/cgi.o src/session.o src/base64.o src/md5.o src/string.o src/general.o src/list.o src/cookie.o

+---------------------------------------+
|       Thanks for using LibCGI         |
+---------------------------------------+
| LibCGI is getting better because      |
| people like you are using it. So, if  |
... gekürzt
+---------------------------------------+---------------------------+
| List: http://lists.sourceforge.net/lists/listinfo/libcgi-general  |
+-------------------------------------------------------------------+
Die "-m32" Option solltest du auf einem 32 bit System weglassen.

strummer
Beiträge: 11
Registriert: 11.12.2007 14:12:19

Beitrag von strummer » 15.02.2008 09:51:03

irgendwie komm ich nicht weiter. ich hab alle files nach errno durchsucht, wurde aber nirgends gefunden. und in den standard includes (stdio.h,string.h,...) wird es ja wohl nicht falsch definiert sein.

und es handelt sich dabei gar nicht um die libcgi, das dürfte jemand falsch dokumentiert haben :roll: soweit ich das beurteilen kann, ist das einfach ein selber geschriebenen libcgi.c. sorry für die flaschinfo.

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

Beitrag von gms » 15.02.2008 10:41:32

strummer hat geschrieben:irgendwie komm ich nicht weiter. ich hab alle files nach errno durchsucht, wurde aber nirgends gefunden. und in den standard includes (stdio.h,string.h,...) wird es ja wohl nicht falsch definiert sein.
vielleicht war der Fehler damals auf dem alten Sstem ( auf dem dieses Programm gebaut wurde ) in einer Standard-Header Datei verpackt.
Das Programm muß doch in jedem Fall neu gebaut werden, hast du das schon versucht ?

strummer
Beiträge: 11
Registriert: 11.12.2007 14:12:19

Beitrag von strummer » 15.02.2008 11:22:06

dank deiner hilfe hab ichs jetzt geschafft. das dürft wirklich noch in einem standard-include falsch drinnen gewesen sein. ich habs nämlich immer noch auf der alten maschine kompiliert, da ich zuerst auf der neuen eine liste von fehlermeldungen bekam, bis ich dann gemerkt hab, das eigentlich nur zwei include-pfade falsch gesetzt waren :roll:
danach wurds auch am neuen problemlos kompiliert und funktioniert jetzt auch.

dank nochmal für die erstklassige hilfe!

Antworten