依照官方文档在MSYS2中安装GTK
最近手痒痒,想干点事儿,于是就有了这篇文章,为后面用Rust语言写GTK程序做准备
在MSYS2中安装GTK,那就说明使用的是Window系统
我们进入Windows下配置GTK的官方网址
这里将MSYS2安装过程截图一下
官方教程
现在我们关注Step1 Step2 以及 Step5,Step3 Step4 现阶段用不上,等要用的时候,我相信那时的我已经能顺利搞定遇到的问题了
安装MSYS2
依照Step1的提示,,我们安装MSYS2
在中国科学技术大学开源软件镜像站中找到msys2
ustc中的msys2点击进入到distrib目录下,由于我这Windows 64位的系统,故下载了msys2-x86_64-latest.exe
msys2-x86_64-latest.exe下载接下来就是安装,和普通软件的安装一样,双击msys2-x86_64-latest.exe
即可
我这里是更改了安装目录,使其装在了D盘
msys2安装界面安装完毕后,打开msys2的命令窗口,我们便可以进行下一步:安装gtk3
安装gtk3
依照Step2的提示,我们执行pacman -S mingw-w64-x86_64-gtk3
直接回车安装
msys2中安装mingw-w64-x86_64-gtk3没错,慢的一塌糊涂,这就需要使用国内的镜像站来加速了
我们再次在中国科学技术大学开源软件镜像站中找到msys2的Help,
MSYS2 Help点击进入 MSYS2 源使用帮助
MSYS2 源使用帮助意思就是让我在下面的三个配置文件中
image.png都使用ustc的源,以mirrorlist.mingw64
为例,用记事本打开mirrorlist.mingw64
查看一下内容
##
## 64-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
Server = http://repo.msys2.org/mingw/x86_64/
Server = https://sourceforge.net/projects/msys2/files/REPOS/MINGW/x86_64/
Server = https://www2.futureware.at/~nickoe/msys2-mirror/mingw/x86_64/
Server = https://mirror.yandex.ru/mirrors/msys2/mingw/x86_64/
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
Server = http://mirror.bit.edu.cn/msys2/mingw/x86_64/
Server = https://mirror.selfnet.de/msys2/mingw/x86_64/
发现给我列出了好几个Server,其中就包含了ustc的源,我们将ustc的源(Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
)移动到最前面
剩下两个配置文件做相同的操作
然后执行 pacman -Sy
接着我们来执行之前的命令pacman -S mingw-w64-x86_64-gtk3
没错,一下就起飞了,遇到下面的结果,就说明安装完成了
mingw-w64-x86_64-gtk3安装完成依照Step5的提示,我们执行pacman -S mingw-w64-x86_64-toolchain base-devel
命令
后续的所有步骤都直接回车(即默认全部选定)
如果安装过程中出现如下的错误
发生错误建议再次执行pacman -S mingw-w64-x86_64-toolchain base-devel
命令
如果错误依旧,那么请先执行pacman -Sy
命令后再执行pacman -S mingw-w64-x86_64-toolchain base-devel
命令
可以看到下载大小有了变化,我们回车默认安装
一般会成功,如果还不成功,则重复上面的动作,如果这都还不成功,I have no idea,自己再搜搜解决办法,下图展示了安装成功的情况
安装成功编译GTK程序
我们进入Hellow World页面
点击进入Hellow World页面依照提示,在当前目录创建hello-world-gtk.c
文件
#include <gtk/gtk.h>
static void
print_hello (GtkWidget *widget,
gpointer data)
{
g_print ("Hello World\n");
}
static void
activate (GtkApplication *app,
gpointer user_data)
{
GtkWidget *window;
GtkWidget *button;
GtkWidget *button_box;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Window");
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
gtk_container_add (GTK_CONTAINER (window), button_box);
button = gtk_button_new_with_label ("Hello World");
g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_close), window);
gtk_container_add (GTK_CONTAINER (button_box), button);
gtk_widget_show_all (window);
}
int
main (int argc,
char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
然后执行命令
编译hello-world-gtk.cgcc `pkg-config --cflags gtk+-3.0` -o hello-world-gtk hello-world-gtk.c `pkg-config --libs gtk+-3.0`
这里提示bash: gcc: 未找到命令,但是我们之前在选择的时候是默认全部安装,并且里面有gcc的安装
gcc安装证据我们查找一下gcc的路径
gcc安装路径查找
即gcc安装在了 /mingw64/bin/ 目录下
再查看一下PATH环境变量的值
查看PATH环境变量的值竟然!!!gcc的路径并没有在PATH环境变量中,那我们手动添加一下
执行
export PATH="/mingw64/bin:$PATH"
命令后再执行命令
gcc `pkg-config --cflags gtk+-3.0` -o hello-world-gtk hello-world-gtk.c `pkg-config --libs gtk+-3.0`
就会正常产出可执行文件hello-world-gtk.exe
当然,此时双击运行是不会成功的
运行失败我们知道,官方的gtk3-demo.exe
是能运行成功的,我们先找到它
我们可以将hello-world-gtk.exe拷贝到与gtk3-demo.exe
相同的目录(/mingw64/bin
)下后双击运行便成功了
当然,更为便捷的是将gtk3-demo.exe
所在的目录添加到系统的PATH
环境变量中,这样就不用每次都拷贝到/mingw64/bin
目录下去运行