You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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
      
  • 安装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
      
  • 验证Vala版本兼容性:
    执行valac --version确认Vala版本,建议使用0.54及以上版本,以完全兼容GIO 2.74.3的API。

内容的提问来源于stack exchange,提问作者AbP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:45:40