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 Möchte ich nun statisch binden: gcc -o gd1-st -L/usr/lib/libgd.a gd1.c /tmp/ccKpGG7g.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 klappt das nicht. Hat irgendwer mal einen Tipp? Fehlen weitere lib-angaben? Danke 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
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
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 -- 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
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
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 Das hatte ich auch schon probiert... 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
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 -- 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
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
On Mon, 6 Jul 2009 21:41:41 +0200, you wrote:
/usr/src/packages/SOURCES/gd-2.0.35/gd.c:1586: undefined reference to `sqrt' /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: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/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'
Da fehlt ein zusätzzliches '-lm' um die Bibliothek mit den Mathe-Routinen einzubinden.
/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'
Da vermute ich mal -lpng Ich vermute mal, dass die libgd mit einer pkgconfig-Datei kommt. Dann solltest Du statt der Bibliotheken einen Aufruf von pkgconfig verwenden. Philipp -- 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
Hallo, Am Mon, 06 Jul 2009, Wolfgang Erlenkötter schrieb:
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' [..] Das hatte ich auch schon probiert...
Die statische Lib muß _nach_ den Object-Dateien übergeben werden (impliziert durch die Angabe der Quelltext-Datei), die die Lib referenzieren. Also: a) gcc -o gd1-st gc1.c /usr/lib/libgd.a b) gcc -o gd1-st gc1.c -static -lgd c) gcc -o gd1-st gd1-st.c -Wl,-Bstatic -lgd -Wl,-Bdynamic bei b) wird das Programm aber komplett statisch gelinkt, bei a) und c) nur die libgd. RTFM: info gcc, info ld. HTH, -dnh -- "Ist dir mal aufgefallen, daß du, was immer ich -- Lost in Space, sage, grundsätzlich anderer Meinung bist?" John Robinson & "Ist doch normal, wir sind verheiratet." Maureen Robinson -- 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
On Monday 06 July 2009 12:54:19 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
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
Sorry hab übersehen, dass Du versuchst ein c-Source file zu linken. Das muss natürlich vorher in ein Object kompiliert werden. Probier mal: gcc -o gd1.o gd1.c (ggf mit Angabe der nötigen Include Pfade: -I ...) und dann gcc -o gd1-st /usr/lib/libgd.a gd1.o -- 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
On Tue, 07 Jul 2009, 15:03:47 +0200, Volker Poplawski wrote:
On Monday 06 July 2009 12:54:19 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
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
Sorry hab übersehen, dass Du versuchst ein c-Source file zu linken. Das muss natürlich vorher in ein Object kompiliert werden.
Auch Sorry, aber hast du mittlerweile die anderen Postings in diesem Thread gelesen? Ob das gcc-Treiber Programm nun erst eine Ehrenrunde einlegt, um ein .o File zu generieren, oder ob es das implizit tut, aendert nichts an dem eigentlichen Problem, der Reihenfolge der Parameter. Libraries (zumindest statische, aber fuer dynamische gilt das genauso) gehoeren ans Ende der Parameterliste; sie dienen schliesslich dazu, dass aus ihnen allgemein bereitgestellte Funktionalitaet dann genutzt werden kann/soll, wenn es jemand braucht, aber eben auch nicht mehr - in den Beispielen sind aber noch keinerlei Wuensche nach Funktionalitaet genannt worden, denn ob gd1.o oder gd1.c nun am Ende der Liste stehen, juckt den Linker zu dem Zeitpunkt, wenn er die Library anpackt und nach benoetigter Funktionalitaet durchsucht, herzlich wenig - er weiss halt schlicht noch *gar nichts* von dem File! Bei shared Libraries faellt das deswegen nicht auf, da lediglich der Name der shared Library (und ggfs. der Path) beim Linken im Executable vermerkt wird; unresolved Externals werden dann aber erst beim Starten des Programms (Executable) abgebunden, und zwar mit den shared Libraries, die beim Linken angegeben worden waren, und auch in genau der Reihenfolge. Du kannst ja mal eine Funktion "int main (int argc, char **argv)" in eine shared Library packen, die dann in deiner Kommandozeile *vor* deinem eigenen Main-Programm gelinkt wird...
Probier mal: gcc -o gd1.o gd1.c (ggf mit Angabe der nötigen Include Pfade: -I ...) und dann gcc -o gd1-st /usr/lib/libgd.a gd1.o
HTH, cheers. l8er manfred -- 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
moin moin, Am Montag, 6. Juli 2009 12:15 schrieb Wolfgang Erlenkötter: [...]
Möchte ich nun statisch binden:
gcc -o gd1-st -L/usr/lib/libgd.a gd1.c
Versuch mal: gcc -o gd1-st -static -L/usr/lib/libgd.a gd1.c
klappt das nicht. Hat irgendwer mal einen Tipp? Fehlen weitere lib-angaben?
HTH Andre -- Speer's 1st Law of Proofreading: The visibility of an error is inversely proportional to the number of times you have looked at it. -- Wethern's Law: Assumption is the mother of all screw-ups. -- 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
Am Mo Juli 6 2009 13:16:46 schrieb Andre Heine:
moin moin,
Am Montag, 6. Juli 2009 12:15 schrieb Wolfgang Erlenkötter:
[...]
Möchte ich nun statisch binden:
gcc -o gd1-st -L/usr/lib/libgd.a gd1.c
Versuch mal:
gcc -o gd1-st -static -L/usr/lib/libgd.a gd1.c
klappt das nicht. Hat irgendwer mal einen Tipp? Fehlen weitere lib-angaben?
HTH
nee, leider nicht. Wolfgang
Andre
-- Speer's 1st Law of Proofreading: The visibility of an error is inversely proportional to the number of times you have looked at it. -- Wethern's Law: Assumption is the mother of all screw-ups.
-- 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
Hallo, einfach nochmal vielen Dank an alle, kann erst jetzt meine Emails abrufen. Hat prima geklappt! 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
participants (6)
-
Andre Heine
-
David Haller
-
Manfred Hollstein
-
Philipp Thomas
-
Volker Poplawski
-
Wolfgang Erlenkötter