web-dev-qa-db-ja.com

Visual Studio 2010でGTKを構成する方法

Visual Studioでgtk +を構成しようとしましたが、適切に機能しません。

20

GTK +をVS2010で動作させたので、動作させる場合は数分かかるので、楽しみに備えてください。

まず、最新の Windows All-In-One bundle をダウンロードします。私が使用したGTK 2.24バンドルのオプションの直接ダウンロードリンク here 。直接リンクは32ビットバージョンへのリンクです。 experimentalと表示されているため、64ビットバージョンはテストしていません。

バンドルをダウンロードしたら、C:\gtkまたは私の場合はD:\gtkなどに解凍します。

次に、GTKフォルダーのシステム環境変数を作成します。コマンドプロンプトを開き、次のように記述します:setx GTKDIR {Path to your GTK folder} /mこれは、私の場合はsetx GTKDIR D:\gtk /mです。

また、GTK +でビルドされたアプリケーションをWindowsで実行するために必要な.dllファイルをシステムPATHに追加します。非常に簡単にするために、システムパスを PathEditor で編集することをお勧めします。次に、システムパスにGDKバイナリフォルダーへのパスを追加します。私の場合はD:\ gtk\binです。コマンドプロンプトに[〜#〜] path [〜#〜]と入力して、GTK binフォルダーがPATHに追加されていることを確認します。

次に、Visual Studio 2010に進み、新しいプロジェクトを作成します。

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

次に、アプリケーションWizardが表示されます。

クリックして選択:

Windows Application

Empty Project

[完了]をクリックして続行します。

ソースファイルを追加する前に、Solution Explorerでプロジェクト名を右クリックし、Properties。次に、構成プロパティに移動し、次にVC++ディレクトリに移動します。ここで、GTKのインクルードファイルとライブラリファイルをインクルードディレクトリおよびライブラリディレクトリ

インクルードディレクトリに次のものが必要です

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

およびライブラリディレクトリ

$(GTKDIR)\lib

プロジェクトのプロパティを表示したまま、Linkerをクリックし、次にSystem。右側でSubSystemを探して、ドロップダウンボックスをクリックします。選択Windows/SUBSYSTEM: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-bitfieldsを削除しました。これは、必要のない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

必要なすべてのフラグが生成されたら、それらをプロジェクトに追加する必要があります。もう一度、プロジェクト名を右クリックしてPropertiesをクリックします。次にC/C++に移動し、Command Lineをクリックします。右側にAdditional Optionsという空のボックスが表示されます。 compilerflags.txtの内容をコピーしてこのボックスに貼り付けます。

上記を完了したら、Linkerをクリックし、次にCommand Lineをクリックします。もう一度、linkerflags.txtファイルの内容を追加オプションボックス。ここにいる間に、最後のリンカーフラグを1つ追加します/ ENTRY:mainCRTStartupこのフラグは、Microsoftの標準ではなく標準のmain()を使用することをVisual Studioに通知します_tmain()をメインプログラムのエントリポイントとして使用します。

最後に、Source Filesフォルダーで、次の内容で新しい.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

楽しかったですよね? :)

37
ManuelH
1
liberforce

this のようなガイドの助けを借りてWindows上でGTK +スタックを構築している場合、プリコンパイルされたバイナリを使用する贅沢は自由に使えません。

この場合、私は次のアプローチを提案します。

  1. プリコンパイルされたバイナリをダウンロードする-これには2つの利点があります。

    • これには、コンパイル済みソースに使用できるpkg-config.exeユーティリティが付属しています。
    • これには、コンパイルされたソースに適合できる豊富な.pcファイルを含むpkgconfigフォルダーも含まれます。
  2. デバッグ/リリースモードでパッケージをコンパイルします。これが自分でコンパイルする主な利点です。ヘッダー、libs、dlls/exeをそれぞれinclude、lib、binフォルダーに体系的に配置します。

  3. Pkgconfigフォルダーをprecompiled_gtk_source\binからcompiler_gtk_source\binにコピーし、それにPKG_CONFIG_PATH変数のパスを設定して、compiler_gtk_source\bin\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の名前がbinフォルダーにあるものと正確に一致していることを確認してください。

  1. Requireステートメントの後に含まれている.pcの.pcファイルを再帰的に変更する必要があり、.pcsが欠落しているか、名前がある場合不一致の場合、適切な変更を加えることができます。ここまでで、上から下へのアプローチの利点をすでに理解しているはずです。依存関係の.pcファイルをすべて整理するまで体系的に整理するのに役立ちます。次に、以下のコマンドを実行して、問題が発生していないか確認します。

  2. 最後に、以下のようにpkg-configコマンドを実行します。

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

cut、copy&pasteを使用していつでも使用できるように、結果をcompilerflags.txt&linkerflags.txtという名前のテキストファイルにリダイレクトしました。もちろん、コンパイラ固有のフラグのみを保持する必要があります。

これがいつか誰かを助けることを願っています。

1
sjsam