msys2下的gtk3配置和编译(纯手动参数展示)
mingw吧
全部回复
仅看楼主
level 13
好久没写点东西。因为最近多次的被度娘封号,所以实在是没心情。
今天值班没事,顺便写点,不知道会不会被再次封号 [鄙视]
2018年06月30日 01点06分 1
level 13
首先装好msys2,这个没什么可说的,
然后用命令pacman -S mingw-w64-i686-gtk3
装上gtk3
2018年06月30日 01点06分 2
八主,有些问题,麻烦你看下我楼底回复的贴子
2018年12月06日 03点12分
level 13
从百度随便找了个gtk 的hello.c作编译例:
#include <gtk/gtk.h>
static void print_hello (GtkWidget *widget,
gpointer data)
{
g_print ("Hello World\n");
}
static gboolean on_delete_event (GtkWidget *widget,
GdkEvent *event,
gpointer data)
{
g_print ("delete event occurred\n");
return TRUE;
}
int main (int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *button;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Hello");
g_signal_connect (window, "delete-event", G_CALLBACK (on_delete_event), NULL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
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_widget_destroy), window);
gtk_container_add (GTK_CONTAINER (window), button);
gtk_widget_show (button);
gtk_widget_show (window);
gtk_main ();
return 0;
}
2018年06月30日 01点06分 3
但愿别删
2018年06月30日 01点06分
level 13
随便输入个编译命令gcc hello.c开始编译
这时开始报错,什么缺少gtk/gtk.h啦,啥glib.h啦。根据报错提示把所有include路径加上
加完以下的路径终于没路径报错了
-I/f/msys32/mingw32/include/gtk-3.0 -I/f/msys32/mingw32/include/glib-2.0 -I/f/msys32/mingw32/lib/glib-2.0/include -I/f/msys32/mingw32/include/pango-1.0 -I/f/msys32/mingw32/include/cairo -I/f/msys32/mingw32/include/gdk-pixbuf-2.0 -I/f/msys32/mingw32/include/atk-1.0
注意以上路径是msys2中的linux路径写法。如果以后想纯用mingw64编译注意win下路径的不同格式
2018年06月30日 01点06分 4
好象这两天神功护体还在,但愿别删
2018年06月30日 01点06分
level 13
头文件加完之后因为没链接库文件,所以开始各种函数未定义报错。我们可以用notepad++打开随便一个lib文件夹下的.a文件,然后选择在文件查找该函数名,这样可以找到含有该函数名的库。
当然了你可以百度函数名,但是我不得不说百度常找不到,而且远没有我的方法快。(这是个偷懒的办法,等学会了gtk自然知道函数所属库)
加上调用的库 -L/f/msys32/mingw32/lib -lgtk-3 -lglib-2.0 -lgdk-3 -lcairo -latk-1.0 -lpango-1.0 -lgobject-2.0
别忘记指定程序入口为窗体程序 -mwindows
2018年06月30日 02点06分 5
确切点说对于这个hello程序而言,只要-lgtk-3 -lglib-2.0 -lgobject-2.0三个库
2018年06月30日 02点06分
level 13
编译生成exe后,运行时会有点麻烦。提示缺少各种dll文件。
解决方法之一,把msys2下的mingw/bin目录和user/bin目录加入系统的环境变量。
其实我更喜欢这个笨方法,点击hello.exe然后看报错,把缺少的dll 一个个复制过来,当然这种事干一次就好了,基本上也了解了gtk文件调用了哪些动态库。当然了你也可以用dll文件依赖工具检查一下dll的依赖关系,集成包用有这工具。
最后会发现gtk在win下的运行依赖可真是不少,一个hello.c有20M
2018年06月30日 02点06分 7
level 13
msys2的用法基本上就是轻型的archlinx
当熟悉了msys2后,可以很轻松的使用archlinux.
当然了archlinux安装有点麻烦,我第一次安装时看着官方文档用了快一小时才基本能用(还不包括后期花了很多时间配置)
所以还是推荐archlinux的一个发行版manjaro.我在虚拟机上安装只要十几分钟就进桌面,加上基本编译环境配置好也就两小时不到。
2018年06月30日 02点06分 8
level 13
发现好象还缺少点说明
手动编译可以帮助了解库的关系。
如果要用pkg-config的话注意msys2下有三个,它们对应的.pc文件各不相同。
注意别用一般不用msys下的,而是用mingw32/bin或mingw64/bin的
下面是一个编译x32位程序的例子,编译上面hello.c的
gcc hello.c -o hello `i686-w64-mingw32-pkg-config --cflags --libs gtk+-3.0 `
2018年06月30日 06点06分 9
level 1
这吧就几个活人[滑稽]
2018年07月24日 16点07分 10
这种地方不会有太多人啦。都是直接拿东西走人。置顶下载量也有五六千了。
2018年07月24日 23点07分
level 1
2018年12月06日 03点12分 11
可以加入国内镜像站,百度下有好几个
2018年12月06日 05点12分
level 1
2018年12月06日 03点12分 12
网络不好时会自动链接备选镜像站重新下载,图中libffi包已重载完毕
2018年12月06日 05点12分
1