2012-12-14 44 views
0

首先我必須說我是linux新手。 我使用Ubuntu並嘗試編譯一些C代碼。 我學會了gtk,並用gcc編譯了一些程序,但是我想讓它成爲windows。 這就是爲什麼我在一個包中下載了gtk的所有窗口,並將include和lib文件夾放入/ usr/i686-w64-mingw32。 但是當我嘗試用mingw編譯我的源代碼時,它說沒有找到gtk/gtk.h。 我該怎麼辦?我無法在Ubuntu上編譯一些gtk c代碼用於windows

謝謝大家。

+0

你可以找到'gtk/*。h'文件的真實文件路徑,並將它們添加到gcc的默認庫中,或者使用真正的'#include「headerfile.h」'字符串重新排列'#include'命令。 – diegoperini

+0

當我更改gtk/gtk.h到/ usr/i686-w64-mingw32/include ...也是真正的路徑然後$ i686-w64-mingw32-gcc main.c'pkg-config gtk + -2.0 --cflags 'pkg-config gtk + -2.0 --libs' 在pkg-config搜索路徑中找不到包gtk + -2.0。 找不到包'gtk + -2.0'找到 從main.c中包含的文件:1:0: /usr/i686-w64-mingw32/include/gtk-2.0/gtk/gtk.h:32:21:致命錯誤:gdk/gdk.h:沒有這樣的文件或目錄 編譯終止。 – user1866936

回答

0

將您的pkg-config.exe所在的目錄添加到您的PATH,或將PKG_CONFIG_DIR環境變量設置爲該目錄。

+0

你能寫我該如何編譯我的代碼。我應該怎麼寫到終端窗口?我將/ usr/i686-w64-mingw32/bin添加到PATH變量,並將/ usr/i686-w64-mingw32/lib/pkgconfig添加到PKG_CONFIG_PATH。但是當我嘗試用這個命令編譯代碼時:$ i686-w64-mingw32-gcc'pkg-config --cflags gtk + -2.0' main。c -o Impuls.exe'pkg-config --libs gtk + -2.0' main.c:1:21:致命錯誤:gtk/gtk.h:沒有這樣的文件或目錄 編譯終止。 – user1866936

+0

「pkg-config --cflags --libs」返回給你什麼? – liberforce

0

我知道這個問題是真的老了,但是......

當交叉編譯,你需要用「--sysroot」參數中指定的SYSROOT。

--sysroot=dir : Use dir as the logical root directory for headers and libraries. For example, if the compiler would normally search for headers in /usr/include and libraries in /usr/lib, it will instead search dir/usr/include and dir/usr/lib. [[ref]][1]

當你這樣做時,包括路徑等等都採取相對SYSROOT,你的情況 「的/ usr/i686的-W64-的mingw32 /」。既然你把庫放在「lib」中,而頭文件放在「include」中,除了用GTK編譯的額外參數可能需要的東西之外,所有東西都應該可以工作。

如果你看的 「pkg配置--cflags GTK + -2.0」 的輸出,那麼它應該如下所示:

-pthread -I/usr/include目錄/ GTK的2.0 -I/USR /lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/gio-unix-2.0/-I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux- gnu/glib-2.0/include -I/usr/include/freetype2

如果您指定了sysroot並仍然收到y ou報告,那麼可能會將頭文件放在錯誤的文件夾中。 gtk.h的本地路徑是「/usr/include/gtk-2.0/gtk/gtk.h」,所以要從mingw GTK包中交叉編譯版本應該被複制到「/ usr/i686-w64-mingw32 /包括/ GTK-2.0/GTK/gtk.h」。

最後請注意,pkg-config爲您提供了「-I/usr/lib/x86_64-linux-gnu/gtk-2.0/include」。如果您正確指定了sysroot,並將頭文件放在pkg-config所描述的位置中,則此包含路徑可能仍會給您帶來問題。問題是pkg-config給你本地編譯的答案,並且你想交叉編譯。