Hallo, ich muss dich leider entäuschen (s.u.) Am Mo Juli 6 2009 18:40:18 schrieb Manfred Hollstein:
On Mon, 06 Jul 2009, 12:54:19 +0200, Wolfgang Erlenkötter wrote:
Hallo
danke schonmal,
Am Mo Juli 6 2009 12:35:03 schrieb Volker Poplawski:
On Monday 06 July 2009 12:15:35 Wolfgang Erlenkötter wrote:
Hallo,
vielleicht kann mir ja jemand helfen, nachdem meine Suche bisher erfolglos war. Auch wenn es nur etwas mit opensuse zu tun hat...
Und zwar möchte ich ein eigenes kleines C-Programm *statisch* gegen die gd-Lib linken, da ich das Programm auf verschiedenen Rechner benötige, ohne das dort die entsprechenden libs installiert werden. Linke ich das Programm dynamisch klappt alles:
gcc -o gd1-sh -lgd gd1.c
Das sollte (auch wenn's so funktioniert) so aussehen (zur Begruendung s.u.):
gcc -o gd1-sh gd1.c -lgd
Möchte ich nun statisch binden:
gcc -o gd1-st -L/usr/lib/libgd.a gd1.c
Mit -L setzt man den Such-Pfad für Libs.
Ein .a File sind letztendlich nur zusammengeklebte .o files. Deshalb gib das File direkt beim Linken an:
gcc -o gd1-st /usr/lib/libgd.a gd1.c
:~/c_only/gd> gcc -o gd1-st /usr/lib/libgd.a gd1.c
/tmp/cceimNSC.o: In function `main': gd1.c:(.text+0x21): undefined reference to `gdImageCreate' gd1.c:(.text+0x47): undefined reference to `gdImageColorAllocate' gd1.c:(.text+0x6d): undefined reference to `gdImageColorAllocate' gd1.c:(.text+0x93): undefined reference to `gdImageColorAllocate' gd1.c:(.text+0xb9): undefined reference to `gdImageColorAllocate' gd1.c:(.text+0xdf): undefined reference to `gdImageColorAllocate' gd1.c:(.text+0x114): undefined reference to `gdImageRectangle' gd1.c:(.text+0x146): undefined reference to `gdImageRectangle' gd1.c:(.text+0x168): undefined reference to `gdImageFill' gd1.c:(.text+0x19a): undefined reference to `gdImageRectangle' gd1.c:(.text+0x1bc): undefined reference to `gdImageFill' gd1.c:(.text+0x1ee): undefined reference to `gdImageRectangle' gd1.c:(.text+0x210): undefined reference to `gdImageFill' gd1.c:(.text+0x242): undefined reference to `gdImageRectangle' gd1.c:(.text+0x264): undefined reference to `gdImageFill' gd1.c:(.text+0x28d): undefined reference to `gdImagePng' gd1.c:(.text+0x2a3): undefined reference to `gdImageDestroy' collect2: ld returned 1 exit status
Na ja, die Reihenfolge der Parameter spielt da auch schon 'ne Rolle; damit von einer Library etwas eingebunden wird, muss ueberhaupt etwas referenziert werden; bei deiner Kommandozeile steht die Quelle aber erst nach der Library, damit wird dann auch nichts aus der Library genutzt. Grundsaetzlich solltest du dir als Grundregel einfach merken, dass Libraries immer am Ende der Kommandozeile stehen, es sei denn, es gibt andere Gruende - das sind dann aber immer ziemliche Spezialfaelle. Folgendes wird bei dir funktionieren:
gcc -o gd1-st gd1.c /usr/lib/libgd.a
Cheers.
l8er manfred
Also hier die Ausgabe. wolfgang@pio:~/c_only/gd> gcc -o gd1-st gd1.c /usr/lib/libgd.a /usr/lib/libgd.a(gd.o): In function `lsqrt': /usr/src/packages/SOURCES/gd-2.0.35/gd.c:1586: undefined reference to `sqrt' /usr/lib/libgd.a(gd.o): In function `gdImageCopyRotated': /usr/src/packages/SOURCES/gd-2.0.35/gd.c:2587: undefined reference to `sqrt' /usr/src/packages/SOURCES/gd-2.0.35/gd.c:2588: undefined reference to `cos' /usr/src/packages/SOURCES/gd-2.0.35/gd.c:2589: undefined reference to `sin' /usr/lib/libgd.a(gd.o): In function `gdImageDashedLine': /usr/src/packages/SOURCES/gd-2.0.35/gd.c:1281: undefined reference to `atan2' /usr/src/packages/SOURCES/gd-2.0.35/gd.c:1281: undefined reference to `sin' /usr/src/packages/SOURCES/gd-2.0.35/gd.c:1349: undefined reference to `atan2' /usr/src/packages/SOURCES/gd-2.0.35/gd.c:1349: undefined reference to `sin' /usr/lib/libgd.a(gd.o): In function `gdImageLine': /usr/src/packages/SOURCES/gd-2.0.35/gd.c:1105: undefined reference to `atan2' /usr/src/packages/SOURCES/gd-2.0.35/gd.c:1105: undefined reference to `cos' /usr/src/packages/SOURCES/gd-2.0.35/gd.c:1186: undefined reference to `atan2' /usr/src/packages/SOURCES/gd-2.0.35/gd.c:1186: undefined reference to `sin' /usr/lib/libgd.a(gd_png.o): In function `gdImagePngCtxEx': /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:508: undefined reference to `png_create_write_struct' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:520: undefined reference to `png_create_info_struct' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:831: undefined reference to `png_destroy_write_struct' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:537: undefined reference to `png_set_write_fn' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:553: undefined reference to `png_set_compression_level' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:608: undefined reference to `png_set_IHDR' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:626: undefined reference to `png_set_tRNS' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:709: undefined reference to `png_write_info' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:712: undefined reference to `png_set_packing' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:779: undefined reference to `png_write_image' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:780: undefined reference to `png_write_end' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:817: undefined reference to `png_write_image' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:818: undefined reference to `png_write_end' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:524: undefined reference to `png_destroy_write_struct' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:682: undefined reference to `png_set_tRNS' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:705: undefined reference to `png_set_PLTE' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:826: undefined reference to `png_write_image' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:827: undefined reference to `png_write_end' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:779: undefined reference to `png_write_image' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:780: undefined reference to `png_write_end' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:817: undefined reference to `png_write_image' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:818: undefined reference to `png_write_end' /usr/lib/libgd.a(gd_png.o): In function `gdPngWriteData': /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:94: undefined reference to `png_get_io_ptr' /usr/lib/libgd.a(gd_png.o): In function `gdPngErrorHandler': /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:70: undefined reference to `png_get_error_ptr' /usr/lib/libgd.a(gd_png.o): In function `gdImageCreateFromPngCtx': /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:152: undefined reference to `png_check_sig' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:157: undefined reference to `png_create_read_struct' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:166: undefined reference to `png_create_info_struct' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:190: undefined reference to `png_set_sig_bytes' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:192: undefined reference to `png_set_read_fn' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:193: undefined reference to `png_read_info' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:195: undefined reference to `png_get_IHDR' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:304: undefined reference to `png_get_valid' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:305: undefined reference to `png_get_tRNS' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:319: undefined reference to `png_read_update_info' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:322: undefined reference to `png_get_rowbytes' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:361: undefined reference to `png_read_image' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:362: undefined reference to `png_read_end' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:384: undefined reference to `png_destroy_read_struct' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:234: undefined reference to `png_get_PLTE' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:238: undefined reference to `png_get_valid' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:246: undefined reference to `png_get_tRNS' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:279: undefined reference to `png_get_valid' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:280: undefined reference to `png_get_tRNS' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:213: undefined reference to `png_set_packing' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:263: undefined reference to `png_destroy_read_struct' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:211: undefined reference to `png_set_strip_16' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:337: undefined reference to `png_destroy_read_struct' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:222: undefined reference to `png_destroy_read_struct' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:169: undefined reference to `png_destroy_read_struct' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:330: undefined reference to `png_destroy_read_struct' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:203: undefined reference to `png_destroy_read_struct' /usr/lib/libgd.a(gd_png.o):/usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:348: more undefined references to `png_destroy_read_struct' follow /usr/lib/libgd.a(gd_png.o): In function `gdPngReadData': /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:85: undefined reference to `png_get_io_ptr' /usr/src/packages/SOURCES/gd-2.0.35/gd_png.c:87: undefined reference to `png_error' collect2: ld returned 1 exit status und dass gibt: wolfgang@pio:~/c_only/gd> gcc -o gd1-st gd1.c -L/usr/lib/libgd.a /tmp/cc0K5LvZ.o: In function `main': gd1.c:(.text+0x21): undefined reference to `gdImageCreate' gd1.c:(.text+0x47): undefined reference to `gdImageColorAllocate' gd1.c:(.text+0x6d): undefined reference to `gdImageColorAllocate' gd1.c:(.text+0x93): undefined reference to `gdImageColorAllocate' gd1.c:(.text+0xb9): undefined reference to `gdImageColorAllocate' gd1.c:(.text+0xdf): undefined reference to `gdImageColorAllocate' gd1.c:(.text+0x114): undefined reference to `gdImageRectangle' gd1.c:(.text+0x146): undefined reference to `gdImageRectangle' gd1.c:(.text+0x168): undefined reference to `gdImageFill' gd1.c:(.text+0x19a): undefined reference to `gdImageRectangle' gd1.c:(.text+0x1bc): undefined reference to `gdImageFill' gd1.c:(.text+0x1ee): undefined reference to `gdImageRectangle' gd1.c:(.text+0x210): undefined reference to `gdImageFill' gd1.c:(.text+0x242): undefined reference to `gdImageRectangle' gd1.c:(.text+0x264): undefined reference to `gdImageFill' gd1.c:(.text+0x28d): undefined reference to `gdImagePng' gd1.c:(.text+0x2a3): undefined reference to `gdImageDestroy' collect2: ld returned 1 exit status Vielleicht noch ein Wort zur Konfiguration: openSUSE 10.2 mit einer aktuellen gd-lib 2.0.35 (hier nur ein ./configure --prefix=local) ... Wolfgang -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org