vcpkg的gtk在Windows上问题
gtk吧
全部回复
仅看楼主
吧务
level 11
LuoYu0401 楼主
最近几天又尝试使用vcpkg安装gtk,发现问题很大。
1. 要解决网络问题,不仅包括github、还有ftp.gnu;
2. 在安装时可能随时报错,但多次使用vcpkg install可以解决问题,搞不懂,明明都是同样的命令,有时失败有时成功;
3. vcpkg编译安装gtk要消耗很大的存储空间,debug跟release各一份,如果不只有x64_windows架构的话还会增加,然后使用cmake还会根据cmake配置再缓存几份,这个应该是vcpkg跟cmake的问题吧;
4. 使用cmake引用gtk包还需要在vcpkg里安装pkgconf,使用pkgconf来引用名为gtk4或者gtk4-win32的包;
5. 使用msvc工具,在链接时会找不到gtk4的动态库,因为它链接的是扩展名为lib的库,而vcpkg只编译了dll动态库。
搞了几天,结果挺难绷的[狂汗]
2025年09月16日 08点09分 1
吧务
level 14
比几年前更难绷了
2025年09月16日 10点09分 2
level 2
但是我编译从来没出过问题,如果实在编译不了可以直接用官网推荐的gvsbuild(网页链接)。vcpkg上的gtk4版本相对于官网也比较落后(当时从mingw转msvc一直无法通过编译,小demo能通过但代码多了就报错,反复编译gtk4N次后用了gvsbuild才解决问题,vcpkg更新有些慢,遇到gtk这种api频繁变动的真的坑死人)。msvc动态库文件是xxx.dll+xxx.lib,静态库文件是xxx.lb,无论静态库还是动态库都是去链接xxx.lib文件,这两种xxx.lib文件不是同一种文件,静态库的xxx.lib是真正的链接库,动态库的xxx.lib不是真正的链接库而是作为xxx.dll的入口但不能直接链接xxx.dll必须通过xxx.lib,因为动态库的xxx.lib不是真正的链接库所以相对较小。mingw也是一样的,动态库是libxxx.dll.a(或者libxxx.a)+xxx.dll,静态库是libxxx.a。linux则不太一样,动态库只有libxxx.so(libxxx.so.xxx.xxx之类的只是指向libxxx.so软链接),静态库只有libxxx.a。肯定有xxx.lib文件只是你没添加(如果编译没出问题肯定是有的),不建议直接使用vs构建gtk项目而是使用meson或者cmake(也可以不使用pkgconf),gtk用到的库实在太多了,手动选择很容易漏。
2026年04月04日 19点04分 5
我是用msys2打包好的,vcpkg感觉挺麻烦的,只是隔了很长时间想再试试咋样了,另外构建工具我用的xmake,对gtk则内部会自动借助pkgconf来查找所有相关依赖
2026年04月07日 00点04分
1