2013-04-09 154 views

回答

36

我得到了GTK +與VS2010的合作,所以如果你想讓它工作,準備好一些樂趣,因爲這需要幾分鐘的時間。

首先,下載最新的Windows All-In-One bundle。可選的直接下載鏈接,用於我使用的GTK 2.24軟件包here。直接鏈接到32位版本。我還沒有測試64位版本,因爲它仍然列爲實驗。

一旦你的包下載,解壓縮到類似C:\gtk或者對於我來說D:\gtk

下一步,我們將創建一個系統環境變量的GTK文件夾。打開一個命令提示符,然後寫:setx GTKDIR {Path to your GTK folder} /m這在我的情況下,將setx GTKDIR D:\gtk /m

我們也將添加在Windows上運行到我們的系統PATH需要GTK +構建的應用程序的.dll文件。爲了讓事情變得非常簡單,我建議你用PathEditor編輯你的系統路徑。現在將路徑添加到GDK二進制文件夾,在我的情況下是D:\ gtk \ bin到系統PATH。通過在命令提示符中鍵入PATH,確認GTK bin文件夾已添加到PATH中。

現在我們轉到Visual Studio 2010並創建一個新項目。

File 
    ->New 
    ->Project 
    Visual C++ 
     ->Win32 
     ->Win32 Console Application 

然後出現應用嚮導。

單擊選擇:

Windows Application 

Empty Project 

單擊Finish繼續。

在我們添加任何的源文件,就在Solution Explorer中點擊項目名稱,然後單擊屬性。現在去配置屬性然後VC++目錄。我們現在需要將包含和庫文件從GTK添加到包含目錄庫目錄

你應該有以下的包含目錄

$(GTKDIR)\lib\gtk-2.0\include 
$(GTKDIR)\lib\glib-2.0\include 
$(GTKDIR)\include 

庫目錄

$(GTKDIR)\lib 

雖然我們仍然在項目屬性的看法,點擊鏈接器然後系統。在右側找到子系統,然後單擊下拉框。選擇Windows /子系統:WINDOWS

接下來,我們必須爲編譯器和鏈接器生成標誌。幸運的是,GTK +附帶了一個名爲pkg-config的漂亮小工具,我們將使用它自動爲我們生成這些標誌。 pkg-config工具可以在GTK的bin文件夾中找到。在我的情況下,使用我們之前定義的系統變量,這是D:\ gtk \ bin%GTKDIR%\ bin。只需導航到bin文件夾使用命令提示符(創建的文本文件時會輸出有),並運行以下命令:

pkg-config --cflags gtk+-2.0 --msvc-syntax > compilerflags.txt 

這將創建一個我們需要的編譯器標誌,並將它們存儲在文本文件中。 我對編譯器標誌結果(我已刪除了標誌-mms-位域,這是一個只有GCC標誌,我們並不需要):

-ID:/gtk/include/gtk-2.0 -ID:/gtk/lib/gtk-2.0/include -ID:/gtk/include/atk-1.0 -ID:/gtk/include/cairo -ID:/gtk/include/gdk-pixbuf-2.0 -ID:/gtk/include/pango-1.0 -ID:/gtk/include/glib-2.0 -ID:/gtk/lib/glib-2.0/include -ID:/gtk/include -ID:/gtk/include/freetype2 -ID:/gtk/include/libpng14 

我們會做鏈接的標誌一樣的:

pkg-config --libs gtk+-2.0 --msvc-syntax > linkerflags.txt 

我的連接標誌結果:

/libpath:D:/gtk/lib gtk-win32-2.0.lib gdk-win32-2.0.lib atk-1.0.lib gio-2.0.lib pangowin32-1.0.lib gdi32.lib pangocairo-1.0.lib gdk_pixbuf-2.0.lib pango-1.0.lib cairo.lib gobject-2.0.lib gmodule-2.0.lib gthread-2.0.lib glib-2.0.lib intl.lib 

隨着生成的所有需要​​的標誌,我們需要將它們添加到我們的項目。再次右鍵點擊項目名稱並點擊屬性。現在轉到C/C++並點擊Command Line。在右側,您應該看到一個名爲的附加選項。將compilerflags.txt內容複製並粘貼到此框中。

完成上述操作後,點擊鏈接器然後命令行。再次,將linkerflags.txt文件的內容複製並粘貼到附加選項框中。當我們在這裏時,添加最後一個鏈接標誌/ENTRY:mainCRTStartup此標誌告訴Visual Studio我們想要使用標準main()而不是Microsoft的_tmain()作爲我們的主程序入口點。

最後,在源文件夾中創建並添加一個新的.cpp文件有以下幾點:

#include <gtk-2.0\gtk\gtk.h> 

int main(int argc, char* argv[]) 
{ 
    gtk_init(&argc, &argv); 

    GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    gtk_widget_set_usize(window, 300, 200); 

    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); 
    gtk_window_set_title(GTK_WINDOW(window), "GTK+ with VS2010"); 

    gtk_widget_show(window);  

    gtk_main(); 
    return 0; 
} 

現在一切都應該準備編譯,鏈接和運行。如果一切順利,你應該迎接以下幾點:enter image description here

那麼這很有趣吧? :)

+0

doesn不爲我工作。鏈接:致命錯誤LNK1123:在轉換爲COFF期間失敗:文件無效或損壞。在今晚第五次失敗後,我正在考慮在我的大腦中投入一顆子彈。 >:?( – MysteryDev 2013-07-23 02:52:44

+1

可能與您的問題http://stackoverflow.com/q/10888391/2373040 – ManuelH 2013-07-24 16:57:31

+0

感謝偉大的答案這對我幫助很大,我是能夠編譯GTK代碼但是,編譯EXE沒。由於無法找到dll,我不想啓動,我只是用gtk/bin將dll複製到了exe文件所在的文件夾中,並且它對我很有用,雖然這當然不是最好的解決方案,再次感謝。 – Ievgen 2013-10-21 20:48:46

1

安裝GTK看看這個GTK+ with Visual Studio 2008 tutorial

+1

無效鏈接。 PLZ粘貼鏈接彙總 – markiv 2014-04-10 20:21:49

+0

請再次測試,鏈接仍然適用。順便說一句,一個教程的總結幾乎沒用。 – liberforce 2014-04-14 08:48:13

+2

來自Stack Overflow的提示寫出很好的答案'爲鏈接提供上下文 .......總是引用重要鏈接中最相關的部分,以防目標站點無法訪問或永久脫機。' – markiv 2014-04-22 14:32:16

1

如果您正在使用像this這樣的指南的幫助在Windows上構建GTK +堆棧,那麼使用預編譯二進制文件的奢侈品將不會被您使用。

在這種情況下,我會建議採用以下方法。

  1. 下載預編譯的二進制 - 這有兩個好處。

    • 此附帶的pkg-config.exe實用程序可用於編譯的源代碼。
    • 這還包含pkgconfig文件夾,其中包含豐富的.pc文件,可以對編譯後的源進行調整。分別安排有系統的頭文件,庫和DLL/exe文件包括lib和bin文件夾 -
  2. 編譯包在調試/釋放模式 - 嗯,這是你自己編譯它的主要優點。

  3. 從precompiled_gtk_source \ bin添加到compiler_gtk_source \ bin和設置PKG_CONFIG_PATH變量 的路徑compiler_gtk_source \ BIN \ pkgconfig添加到它的pkgconfig文件夾複製。

  4. 現在,考慮到編譯gtk時生成的庫的名稱以及預編譯包中相應的庫名稱可能有所不同,您可能需要在compiler_gtk_source \ bin \ pkgconfig * .pc中進行必要的更改文件。我會在這裏採取從頭到腳的方法(我們將很快看到優勢)。從上到下,我只需 即表示最終產品將成爲首先編輯的產品。

    例如,在這種情況下,gtk +是最終產品,我將首先配置 配置此軟件包的.pc。程序如下:

    • 首先看看創建的dll的名稱。在我的情況下,它是gtk-3.0。如果隨預編譯的二進制文件一起提供的.pc文件有另一個名稱,則適當更改名稱 - 在我的情況下,它是gtk-3.0.pc。 (這應該是所有其他.pc文件的情況。)
    • 在文本編輯器中打開gtk-3.0.pc,您將看到如下所示的內容。

GTK的3.0.pc文件:

prefix=c:/gtk_compilation/vs12/win32 
    exec_prefix=${prefix} 
    libdir=${exec_prefix}/lib 
    includedir=${prefix}/include 
    targets=win32 

    Name: GTK+ 
    Description: GTK+ Graphical UI Library 
    Version: 3.18.2 
    Requires: gdk-3.0 atk-1.0 cairo cairo-gobject gdk_pixbuf-2.0 gio-2.0 
    Requires.private: atk 
    Libs: -L${libdir} -lgtk-3 
    Cflags: -I${includedir}/gtk-3.0 -mms-bitfields 

上面的一個是我的自定義文件。如果您不知道每條線路的功能,請致電 ,您可以查看pkg-config help。然而,需求選項 需要特別提及。這是放置依賴dll的地方 - 再次確保dll的名稱與012文件夾中的內容完全匹配。

  • 我們需要遞歸改變.PC文件後要求語句所包含的動態鏈接庫,如果任何的.pcs丟失或如果有一個名不匹配,你可以做出適當的改變。到目前爲止,您應該已經理解了從頭到腳的優勢。它可以幫助我們系統地整理依賴.pc文件,直到我們將它們全部整理出來。 現在,運行下面的命令,看看事情是否正常。

  • 最後像下面運行的pkg-config命令:

    pkg-config --cflags gtk-3.0 --msvc-syntax > compilerflags.txt pkg-config --libs gtk+-2.0 --msvc-syntax > linkerflags.txt

  • 我只是重定向結果到名爲compilerflags.txt & linkerflags.txt,這樣的文本文件,你可以用它們要通過切任何時候,複製粘貼&。當然,你應該只保留編譯器特定的標誌。

    希望這有助於別人,有時。