网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
可签
7
级以上的吧
50
个
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月28日
漏签
0
天
mingw吧
关注:
1,424
贴子:
4,659
看贴
图片
吧主推荐
游戏
17
回复贴,共
1
页
<返回mingw吧
>0< 加载中...
msys2下的gtk3配置和编译(纯手动参数展示)
只看楼主
收藏
回复
千城真人
人气楷模
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
好久没写点东西。因为最近多次的被度娘封号,所以实在是没心情。
今天值班没事,顺便写点,不知道会不会被再次封号
送TA礼物
IP属地:江苏
1楼
2018-06-30 09:45
回复
千城真人
人气楷模
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
首先装好msys2,这个没什么可说的,
然后用命令pacman -S mingw-w64-i686-gtk3
装上gtk3
IP属地:江苏
2楼
2018-06-30 09:48
回复(1)
收起回复
千城真人
人气楷模
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;
}
IP属地:江苏
3楼
2018-06-30 09:50
回复(1)
收起回复
千城真人
人气楷模
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下路径的不同格式
IP属地:江苏
4楼
2018-06-30 09:54
回复(1)
收起回复
千城真人
人气楷模
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
IP属地:江苏
5楼
2018-06-30 10:03
回复(1)
收起回复
千城真人
人气楷模
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
编译生成exe后,运行时会有点麻烦。提示缺少各种dll文件。
解决方法之一,把msys2下的mingw/bin目录和user/bin目录加入系统的环境变量。
其实我更喜欢这个笨方法,点击hello.exe然后看报错,把缺少的dll 一个个复制过来,当然这种事干一次就好了,基本上也了解了gtk文件调用了哪些动态库。当然了你也可以用dll文件依赖工具检查一下dll的依赖关系,集成包用有这工具。
最后会发现gtk在win下的运行依赖可真是不少,一个hello.c有20M
IP属地:江苏
7楼
2018-06-30 10:15
回复
收起回复
千城真人
人气楷模
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
msys2的用法基本上就是轻型的archlinx
当熟悉了msys2后,可以很轻松的使用archlinux.
当然了archlinux安装有点麻烦,我第一次安装时看着官方文档用了快一小时才基本能用(还不包括后期花了很多时间配置)
所以还是推荐archlinux的一个发行版manjaro.我在虚拟机上安装只要十几分钟就进桌面,加上基本编译环境配置好也就两小时不到。
IP属地:江苏
8楼
2018-06-30 10:20
回复
收起回复
千城真人
人气楷模
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 `
IP属地:江苏
9楼
2018-06-30 14:29
回复
收起回复
半瓶子醋I
初级粉丝
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这吧就几个活人
IP属地:北京
10楼
2018-07-25 00:49
回复(1)
收起回复
vvcc9988
初级粉丝
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
IP属地:广东
11楼
2018-12-06 11:31
回复(1)
收起回复
vvcc9988
初级粉丝
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
IP属地:广东
12楼
2018-12-06 11:33
回复(1)
收起回复
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧热议榜
1
爱泼斯坦案首批文件公布
1540110
2
Bin说因为bug输掉比赛
1445940
3
吧友选出贴吧第一喷子
1181404
4
发出你手机里最唐的截图
960282
5
RX9070系列显卡价格提前泄露
876174
6
吞星VS泰罗究竟谁更厉害?
725850
7
华纳怎么皮到现在还没破产
666192
8
月薪五千不配吃火锅?
605061
9
人贩子余华英被执行死刑
530816
10
法国也想要乌克兰矿产
432726
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示