mboost-dp1

GTK+ til Windows - linking problemer


Gå til bund
Gravatar #1 - Spiderboy
14. nov. 2005 18:09
Hejsa. Jeg er blevet bidt af at lave OS-uafhængige programmer, og til det formål benytter jeg GTK+.

Jeg har dog problemer med at lave Windows-programmer med GTK+. Mine kildefiler compiler fint, men jeg kan ikke linke objektfilerne (bruger gcc).

Jeg har installeret en hel masse filer fra http://www.gimp.org/~tml/gimp/win32/downloads.html... Jeg har benyttet pkg-config til at få parametrene til compiling og linking (piped det til en fil, som jeg så har cut'n'pasted in i min makefile).

Jeg har lavet en lille hello world program til at teste med og kører disse kommandoer:

gcc -IC:/gtk/include/gtk-2.0 -IC:/gtk/lib/gtk-2.0/include -IC:/gtk/include/atk-1.0 -IC:/gtk/include/pango-1.0 -IC:/gtk/include/glib-2.0 -IC:/gtk/lib/glib-2.0/include -mms-bitfields -c gtktest.c -o gtktest.o

gcc -LC:/gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv -mms-bitfields -g gtktest.o -o gtktest.exe


Den første kommando virker fint, men den næste melder "undefined reference"-fejl ved hver eneste GTK/GDK/GLib-funktion. Min lib-mappe er fyldt med .lib og .a filer fra ovennævnte website. Den linker tilsyneladende ikke library'erne ind i programfilen.

Hvad gør jeg galt?
Gravatar #2 - bugger
14. nov. 2005 19:56
Det objekt du vil linke skal stå før bibliotekerne du vil linke til.

Kunne du ikke give lidt mere output fra gcc?
Gravatar #3 - Spiderboy
14. nov. 2005 22:39
#2 Mange tak, det virker sørme. Tænk at der skulle så lidt til, det har jeg rodet med i dagevis efterhånden.

For at hjælpe andre, som kunne finde på at kigge i arkiverne, poster jeg lige hvad jeg skulle gøre: De ovenstående kommandoer gav dette resultat:

C:\>gcc -IC:/gtk/include/gtk-2.0 -IC:/gtk/lib/gtk-2.0/include -IC:/gtk/include/a
tk-1.0 -IC:/gtk/include/pango-1.0 -IC:/gtk/include/glib-2.0 -IC:/gtk/lib/glib-2.
0/include -mms-bitfields -c gtktest.c -o gtktest.o

C:\>gcc -LC:/gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0
-lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lin
tl -liconv -mms-bitfields -g gtktest.o -o gtktest.exe
gtktest.o(.text+0x7):gtktest.c: undefined reference to `gtk_main_quit'
gtktest.o(.text+0x5d):gtktest.c: undefined reference to `gtk_init_abi_check'
gtktest.o(.text+0x69):gtktest.c: undefined reference to `gtk_window_new'
gtktest.o(.text+0x71):gtktest.c: undefined reference to `gtk_container_get_type'

gtktest.o(.text+0x80):gtktest.c: undefined reference to `g_type_check_instance_c
ast'
gtktest.o(.text+0x90):gtktest.c: undefined reference to `gtk_container_set_borde
r_width'
gtktest.o(.text+0x95):gtktest.c: undefined reference to `gtk_window_get_type'
gtktest.o(.text+0xa4):gtktest.c: undefined reference to `g_type_check_instance_c
ast'
gtktest.o(.text+0xb4):gtktest.c: undefined reference to `gtk_window_set_title'
gtktest.o(.text+0xb9):gtktest.c: undefined reference to `gtk_window_get_type'
gtktest.o(.text+0xc8):gtktest.c: undefined reference to `g_type_check_instance_c
ast'
gtktest.o(.text+0xe0):gtktest.c: undefined reference to `gtk_window_set_default_
size'
gtktest.o(.text+0xf4):gtktest.c: undefined reference to `gtk_window_set_default_
icon_from_file_utf8'
gtktest.o(.text+0x107):gtktest.c: undefined reference to `g_type_check_instance_
cast'
gtktest.o(.text+0x137):gtktest.c: undefined reference to `g_signal_connect_data'

gtktest.o(.text+0x143):gtktest.c: undefined reference to `gtk_label_new'
gtktest.o(.text+0x14b):gtktest.c: undefined reference to `gtk_container_get_type
'
gtktest.o(.text+0x15a):gtktest.c: undefined reference to `g_type_check_instance_
cast'
gtktest.o(.text+0x16b):gtktest.c: undefined reference to `gtk_container_add'
gtktest.o(.text+0x176):gtktest.c: undefined reference to `gtk_widget_show_all'
gtktest.o(.text+0x17b):gtktest.c: undefined reference to `gtk_main'
collect2: ld returned 1 exit status


Problemet løses ganske rigtigt som #2 skrev ved at flytte "-g gtktest.o" op foran:

C:\>gcc -IC:/gtk/include/gtk-2.0 -IC:/gtk/lib/gtk-2.0/include -IC:/gtk/include/a
tk-1.0 -IC:/gtk/include/pango-1.0 -IC:/gtk/include/glib-2.0 -IC:/gtk/lib/glib-2.
0/include -mms-bitfields -c gtktest.c -o gtktest.o

C:\>gcc -g gtktest.o -LC:/gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgd
k_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -l
glib-2.0 -lintl -liconv -mms-bitfields -o gtktest.exe


Den compiler, linker og eksekverer fint. :-)
Gravatar #4 - Gruesome
15. nov. 2005 15:42
For at runde tråden helt af kunne du jo fortælle hvilke programmer du laver :). Man bliver jo nysgerrig...
Gravatar #5 - Spiderboy
16. nov. 2005 09:57
#4 Alt, hvad jeg kan komme i tanke om. ;-) Jeg er bare træt af kun at kunne tilbyde programmer til Windows, jeg vil gerne være mere alsidig. :-)

Det projekt jeg har i tankerne for tiden, som nok bliver mit første "rigtige" GTK-program, er et program, som skal hjælpe forfattere med at strukturere deres bøger. Holde styr på karakterer, plotudvikling, notater, osv, osv. Har mange ideer til programmet, både inspireret fra adskillige konkurrerende programmer, og ideer jeg ikke har set andre steder. ;-)

Jeg går selv med en lille forfatterdrøm i maven, og de programmer jeg har kunnet finde, gratis såvel som kommercielle, er noget crap for at sige det lige ud. Det burde jeg kunne gøre bedre.

Om det bliver gratis eller kommercielt, og open-source eller closed-source, har jeg ikke afgjort endnu, det kommer an på så meget. Bliver nok en af yderlighederne, enten kommerciel closed-source eller GPL. :-)

Har andre ideer, som jeg også kunne tænke mig at realisere en dag... Computerspil, fysiksimulatorer, compilere, et regneprogram... Ved godt det er ambitiøst, men jeg har heldigvis ikke nogen deadline for disse ideer. ;-)
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login