我尝试在visual studio上配置gtk +,但无法正常工作。 任何人都可以建议我使用适当的解决方案,如何在Visual Studio 2010上安装gtk
答案 0 :(得分:36)
我让GTK +与VS2010一起工作,所以如果你想让它也能正常工作,请准备一些乐趣,因为这需要几分钟。
首先,下载最新的Windows All-In-One bundle。我使用here的GTK 2.24软件包的可选直接下载链接。直接链接是32位版本。我还没有测试64位版本,因为它仍然列为 experimental。
下载捆绑包后,将其解压缩为类似C:\gtk
或我的D:\gtk
接下来,我们将为GTK文件夹创建一个系统环境变量。打开一个命令提示符并写下:setx GTKDIR {Path to your GTK folder} /m
,在我的情况下是setx GTKDIR D:\gtk /m
我们还要将GTK +构建的应用程序所需的.dll文件添加到Windows上运行到我们的系统PATH中。为方便起见,我建议您使用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
单击“完成”继续。
在添加任何源文件之前,右键单击解决方案资源管理器中的项目名称,然后单击属性。现在转到配置属性,然后转到 VC ++目录。我们现在需要将GTK中的包含和库文件添加到包含目录和库目录。
您的包含目录
中应包含以下内容$(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
生成所有需要的标志后,我们需要将它们添加到我们的项目中。再次右键单击项目名称,然后单击属性。现在转到C/C++
并点击Command Line
。在右侧,您会看到一个名为其他选项的空框。将 compilerflags.txt 内容复制并粘贴到此框中。
完成上述操作后,点击链接器,然后点击命令行。再一次,只需将 linkerflags.txt 文件的内容复制并粘贴到附加选项框中即可。当我们在这里时,添加一个最后一个链接器标志 / ENTRY:mainCRTStartup 这个标志告诉Visual Studio我们想要使用标准的main()而不是Microsoft的_tmain()作为我们的主程序入口点。 / p>
最后,在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;
}
现在一切都准备好了编译,链接和运行。如果一切顺利,您应该受到以下问题的欢迎:
那很有趣,对吧? :)
答案 1 :(得分:1)
答案 2 :(得分:1)
如果您在this之类的指南的帮助下在Windows上构建GTK +堆栈,那么使用预编译二进制文件的奢侈品将无法使用。
在这种情况下,我建议采用以下方法。
下载预编译的二进制文件 - 这有两个好处。
在调试/发布模式下编译软件包 - 这是自己编译它的主要优点 - 并分别在include,lib和bin文件夹中系统地安排header,libs和dlls / exe。
将pkgconfig文件夹从precompiled_gtk_source \ bin复制到compiler_gtk_source \ bin并设置PKG_CONFIG_PATH变量的路径 将compiler_gtk_source \ bin \ pkgconfig添加到它。
现在,考虑到自己编译gtk时生成的库的名称以及预编译包中相应的库名称可能不同,您可能必须在compiler_gtk_source \ bin \ pkgconfig *中进行必要的更改。电脑文件。我会在这里采用从上到下的方法(我们很快就会看到优势)。从上到下,我简单地说
意味着最终产品将是首先编辑的产品。
例如在这种情况下,gtk +是最终产品,我会选择
首先配置此包的.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文件夹中的内容。
我们需要递归更改需要语句后包含的dll的.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&amp;的文本文件。 linkerflags.txt,以便您可以随时使用它们 cut,copy&amp;粘贴。当然,你应该只保留编译器特定的标志。
希望这对某人有所帮助。