在Vala中使用Gio库的g_app_info_get_all()及编译报错解决
在Vala中实现Gio.AppInfo.get_all()及命名空间错误修复
对应C代码的Vala实现
你提供的C代码通过g_app_info_get_all()获取所有应用信息,对应的Vala实现如下:
已实现的C语言代码:
#include <gtk/gtk.h> #include <glib/gi18n.h> #include <gio/gdesktopappinfo.h> int main(int argc, char *argv[]) { ... GDesktopAppInfo *app_info; GList *app_list, *l; gtk_init(&argc, &argv); ... app_list = g_app_info_get_all(); ... }
Vala实现代码
using Gtk; using Gio; int main(string[] args) { // 初始化Gtk Gtk.init(ref args); // 调用对应API获取所有应用信息列表 List<AppInfo> app_list = AppInfo.get_all(); // 遍历处理每个应用信息 foreach (unowned AppInfo info in app_list) { // 转换为DesktopAppInfo(对应C中的GDesktopAppInfo)以获取桌面应用专属属性 if (info is DesktopAppInfo) { var desktop_info = (DesktopAppInfo) info; print($"应用名称: {desktop_info.get_name()}\n"); print($"启动命令: {desktop_info.get_commandline()}\n\n"); } } return 0; }
解决Gio命名空间找不到的报错
即使添加了--pkg gio-2.0仍报错找不到Gio命名空间,可按以下步骤排查修复:
确保编译命令包含所有依赖包:
你的应用是Gtk应用,编译时需要同时指定Gtk和Gio的pkg配置,示例命令:- 针对Gtk3:
valac --pkg gtk+-3.0 --pkg gio-2.0 your_app.vala -o your_app - 针对Gtk4:
valac --pkg gtk4 --pkg gio-2.0 your_app.vala -o your_app
- 针对Gtk3:
安装Vala的Gio绑定依赖:
部分Linux发行版中,Vala核心包未包含完整的GIO绑定,需安装对应开发包:- Debian/Ubuntu系:
sudo apt install libvala-$(valac --version | awk '{print $2}' | cut -d. -f1,2)-dev - Fedora/RHEL系:
sudo dnf install vala-devel
- Debian/Ubuntu系:
验证Vala版本兼容性:
执行valac --version确认Vala版本,建议使用0.54及以上版本,以完全兼容GIO 2.74.3的API。
内容的提问来源于stack exchange,提问作者AbP
相关产品推荐
相关产品推荐

