Portál AbcLinuxu, 10. května 2025 00:16

Dotaz: Portace GTK aplikace do Windows

11.9.2005 12:36 MaV | skóre: 6 | Brno
Portace GTK aplikace do Windows
Přečteno: 462×
Odpovědět | Admin
Zdravím, mám aplikaci, kterou píši v GTK+ v Linuxu pomocí Glade a potřebuji ji portovat i pro Windows.
Pro kompilaci používám MinGW, mám nainstalované GTK+ devel i runtime. Make file mám svůj vlastní, autoconf zatím nepoužívám. Při kompilaci mě gcc hlásí něco jako:
main.o(.text+0x2b):main.c: undefined reference to `gtk_set_locale' main.o(.text+0x55):main.c: undefined reference to `gtk_init_abi_check' main.o(.text+0x5a):main.c: undefined reference to `gtk_main' interface.o(.text+0xf):interface.c: undefined reference to `gtk_window_new' atd.
Myslim si, že je problém se slinkováním ... Neví někdo co s tím?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.9.2005 12:47 Pinky | skóre: 30
Rozbalit Rozbalit vše Re: Portace GTK aplikace do Windows
Odpovědět | | Sbalit | Link | Blokovat | Admin
s jakými parametry ten překladač spoštíte, zkopírujte to sem, chyba bude asi v tom že nejsou nastaveny správně cesty ke knihovnám
něco jako -L/usr/lib
11.9.2005 13:01 MaV | skóre: 6 | Brno
Rozbalit Rozbalit vše Re: Portace GTK aplikace do Windows
Můj makefile pro Windows vypada takhle
CC = /d/MinGW/bin/gcc -mms-bitfields -mno-cygwin -mwindows

CFLAGS = -I/d/include/mysql -I/d/GTK/include/gtk-2.0 -I/d/GTK/include/atk-1.0 -I/d/GTK/include/pango-1.0 -I/d/GTK/include/glib-2.0 -I/d/GTK/lib/glib-2.0/include -I/d/GTK/lib/gtk-2.0/include -I/d/GTK/MySQL/include

LIBS = -L/d/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

all: main.o callbacks.o interface.o support.o $(CC) $(LIBS) -o program main.o callbacks.o interface.o support.o

main.o: main.c $(CC) -c main.c $(CFLAGS)

callbacks.o: callbacks.c $(CC) -c callbacks.c $(CFLAGS)

interface.o: interface.c $(CC) -c interface.c $(CFLAGS)

support.o: support.c $(CC) -c support.c $(CFLAGS)
11.9.2005 13:10 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Portace GTK aplikace do Windows
Zadrátované cesty a knihovny mi spíš přijdou jako recept na problémy. Pokud používáš MinGW, měl by ti fungovat pkg-config (stejně jako na Linuxu), takže správné CFLAGS vypíše
pkg-config --cflags gtk+-2.0
a LDFLAGS
pkg-config --libs gtk+-2.0
což přímo použij v Makefile, CFLAGS := $(shell ...), LDFLAGS := $(shell ...).

Pokud nefunguje, tak k fungování stačí nastavit PKG_CONFIG_PATH (jako na Linuxu).
11.9.2005 13:34 MaV | skóre: 6 | Brno
Rozbalit Rozbalit vše Re: Portace GTK aplikace do Windows
pkg-config používám na Linuxu, v MinGW mě ale nefunguje, protože vyhodí úplně jinou cestu než by měl. Na to se ještě podívám a uvidím co s tím.
CFLAGS := $(shell ...), LDFLAGS := $(shell ...) se používá jak?
11.9.2005 14:26 #Tom
Rozbalit Rozbalit vše Re: Portace GTK aplikace do Windows
Malý příklad:
echo `ls`
echo $(ls)
11.9.2005 14:34 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Portace GTK aplikace do Windows
$(shell ...) je funkce make. Funguje podobně jako `...` a $(...) v shellu, rozdíl je ve vyhodnocení:
A := $(shell echo $$RANDOM)
B := `echo $$RANDOM`

default:
	@echo $(A) $(A) $(A) $(A)
	@echo $(B) $(B) $(B) $(B)
Detaily viz v dokumentaci GNU make...
11.9.2005 14:42 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Portace GTK aplikace do Windows
Přesněji spíš funguje tak, jak funguje `...` v shellu, což je ale jinak než v make, které je z tohoto pohledu šablonový jazyk nad shellem.
11.9.2005 15:39 MaV | skóre: 6 | Brno
Rozbalit Rozbalit vše Re: Portace GTK aplikace do Windows
Takže zkoušel jsem kompilovat i s
pkg-config --cflags gtk+-2.0
a
pkg-config --libs gtk+-2.0
ale výsledek je stále stejný, a to
main.o:main.c:(.text+0x2b): undefined reference to `_gtk_set_locale' main.o:main.c:(.text+0x55): undefined reference to `_gtk_init_abi_check' main.o:main.c:(.text+0x5a): undefined reference to `_gtk_main' interface.o:interface.c:(.text+0xf): undefined reference to `_gtk_window_new' interface.o:interface.c:(.text+0x17): undefined reference to `_gtk_window_get_ty pe'
Máte ještě nějaký návrh čím by to mohlo být?

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.