21

我曾尝试在 Visual Studio 上配置 gtk+,但无法正常工作。,谁能建议我一个合适的解决方案,如如何在 Visual Studio 2010 上安装 gtk

4

3 回答 3

38

我让 GTK+ 与 VS2010 一起工作,所以如果你也想让它工作,准备好享受一些乐趣,因为这需要几分钟。

首先,下载最新的Windows All-In-One bundle我在这里使用的 GTK 2.24 包的可选直接下载链接。直接链接是 32 位版本。我没有测试 64 位版本,因为它仍然被列为实验性版本。

下载捆绑包后,将其解压缩到类似C:\gtk或在我的情况下D:\gtk

接下来,我们将为 GTK 文件夹创建一个系统环境变量。打开命令提示符并写入:setx GTKDIR {Path to your GTK folder} /m在我的情况下是setx GTKDIR D:\gtk /m

我们还将添加 GTK+ 构建的应用程序在 Windows 上运行所需的 .dll 文件到我们的系统 PATH 中。为了让事情变得非常简单,我建议您使用PathEditor编辑您的系统 PATH 。现在将 GDK 二进制文件夹的路径添加到系统 PATH 中,在我的例子中是 D:\gtk\bin。通过在命令提示符中键入PATH来确认 GTK bin 文件夹已添加到 PATH 。

现在我们继续使用 Visual Studio 2010 并创建一个新项目。

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

然后出现应用程序向导。

单击选择:

Windows Application

Empty Project

单击完成继续。

在我们添加任何源文件之前,右键单击解决方案资源管理器中的项目名称,然后单击属性。现在转到Configuration Properties,然后转到VC++ Directories。我们现在需要将 GTK 中的包含和库文件添加到Include DirectoriesLibrary Directories

您的包含目录中应该有以下内容

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

图书馆目录

$(GTKDIR)\lib

当我们仍在项目属性视图中时,单击链接器,然后单击系统。在右侧查找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文件的内容复制并粘贴到Additional Options框中。当我们在这里时,添加最后一个链接器标志/ENTRY:mainCRTStartup这个标志告诉 Visual Studio 我们想要使用标准的 main() 而不是 Microsoft 的 _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;
}

现在一切都应该准备好编译、链接和运行了。如果一切顺利,您应该会看到以下内容:在此处输入图像描述

那很有趣,对吧?:)

于 2013-07-16T23:16:35.120 回答
1

如果您在像这样的指南的帮助下在 Windows 上构建 GTK+ 堆栈,那么您将无法享受使用预编译二进制文件的乐趣。

在这种情况下,我建议采用以下方法。

  1. 下载预编译的二进制文件 - 这有两个优点。

    • 这附带了 pkg-config.exe 实用程序,您可以将其用于已编译的源代码。
    • 这还包含 pkgconfig 文件夹,其中包含大量 .pc 文件,这些文件可以适应已编译的源代码。
  2. 以调试/发布模式编译软件包——这是自己编译的主要优点——并系统地分别在 include、lib 和 bin 文件夹中安排头文件、libs 和 dlls/exe。

  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。然而,Require 选项需要特别提及。这是您放置依赖 dll 的地方 - 再次确保 dll 的名称与您在 bin 文件夹中的名称完全匹配。

  1. 我们需要递归地更改Require语句之后包含的 dll 的 .pc 文件,如果缺少任何 .pcs 或名称不匹配,您可以进行适当的更改。到目前为止,您应该已经了解了自上而下方法的优势。它可以帮助我们系统地整理依赖 .pc 文件,直到我们将它们全部整理出来。现在,运行以下命令以查看是否正常。

  2. 最后运行 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 的文本文件,以便您可以随时通过剪切、复制和粘贴来使用它们。当然,您应该只保留编译器特定的标志。

希望这对某人有所帮助。

于 2015-10-19T20:26:41.890 回答
0

看看这个GTK+ 与 Visual Studio 2008 教程

于 2013-04-09T22:34:17.367 回答