Flatpak Meson 没有从 Gnome Builder 中找到 Vala 库

2023-12-02

在 Linux 中,我在 Gnome Builder (3.26.4) 中使用 Meson (0.44.0) 作为将使用 Gee 和 GXml 的控制台程序。我的目的是在 Genie 中写这个。

当我在 Gnome Builder 中使用 Meson 时,它会失败,但使用 valac (0.38.8) 从命令行调用时会成功如下:

valac --pkg=gtk+-3.0 --pkg=gee-0.8 --pkg=gxml-0.16 main.gs

从上面看没有错误。我尝试使用 gee 和 gxml 设置 meson.build依赖性或者作为vala_args。同样的错误。

检查 pkg-config,我得到以下信息:

$ pkg-config --libs gxml-0.16
-L/usr/local/lib64 -lgxml-0.16 -lgio-2.0 -lxml2 -lgee-0.8 -lgobject-2.0 -lglib-2.0
$ pkg-config --libs gee-0.8
-lgee-0.8 -lgobject-2.0 -lglib-2.0
$ pkg-config --libs gee-1.0
-lgee -lgobject-2.0 -lglib-2.0

也许我做错了什么。这是本地 meson.build 文件,后跟顶级 meson.build 和错误:

example_sources = [
  'main.gs'
]

example_deps = [
  dependency('gio-2.0', version: '>= 2.50'),
  dependency('gtk+-3.0', version: '>= 3.22'),
  dependency('glib-2.0', version: '>= 2.50')
]

gnome = import('gnome')

example_sources += gnome.compile_resources(
  'example-resources',
  'example.gresource.xml',
  c_name: 'example'
)

executable(
  'example',
  example_sources,
  vala_args: '--target-glib=2.50 --pkg=gee-0.8 --pkg=gxml-0.16',
  dependencies: example_deps,
  install: true
)

与顶级介子.build:

project(
  'example',
  ['c', 'vala'],
  version: '0.1.0',
  meson_version: '>= 0.40.0',
)

subdir('src')

错误是:

uses Gee

error: The namespace name 'Gee' could not be found

我从 Gnome-Builder 中调用构建。有人可以帮助我了解发生了什么吗?我试图在文档中查找 valac 成功而 meson 失败的原因,但找不到解决方案。


Gee 和 GXml 应该是依赖关系,就像 GIO、GLib 和 GTK+ 一样。所以你应该尝试:

example_deps = [
  dependency('gio-2.0', version: '>= 2.50'),
  dependency('gtk+-3.0', version: '>= 3.22'),
  dependency('glib-2.0', version: '>= 2.50'),
  dependency('gobject-2.0'),
  dependency('gee-0.8'),
  dependency('gxml-0.16'),
  ]

通常你不需要超出这个范围。这使得--pkg中的选项vala_flags不必要。介子会为你做到这一点。介子的工作方式是它使用valac生成 C 代码,然后在单独的阶段使用 C 编译器生成二进制文件。通过使用--pkg你只是告诉valac使用哪个 VAPI 文件,但不通知 C 编译器使用哪个 VAPI 文件pkg-config用于 C 库的包。

另请注意我添加了gobject-2.0作为依赖。如果我没记错的话,GNOME Builder 会错过这一点,并且它确实会影响构建。

错误消息,error: The namespace name 'Gee' could not be found,令人烦恼。这是 Vala 编译器的错误,我本以为编译器能够使用以下命令找到 VAPI 文件vala_args你尝试过的方法。也许您从源代码构建了 Gee,但没有在系统范围内安装?

Meson 确实允许添加另一个 VAPI 搜索目录:

add_project_arguments(['--vapidir',
                       join_paths(meson.current_source_dir(), 'vapi')
                      ],
                      language: 'vala'
                     )

还有更多详细信息瓦拉页介子构建文档。

Meson 0.42 版本中添加了 Genie 支持。所以meson_version:应该>= 0.42.0.

如果仍然存在问题,那么这里有一个MCVE使用 Genie、Gee 和 Meson。这应该从命令行编译。将以下 Genie 程序另存为genie-gee.gs:

[indent=2]
uses Gee

init
  var my_list = new ArrayList of string()
  my_list.add( "one" )
  my_list.add( "two" )
  for item in my_list
    print( item )

然后将以下 Meson 文件另存为meson.build:

project('minimal-genie-gee-example',
        'vala', 'c'
        )

genie_gee_deps = [
                dependency('glib-2.0'),
                dependency('gobject-2.0'),
                dependency('gee-0.8'),
                ]

executable('genie-gee',
           'genie-gee.gs',
           dependencies: genie_gee_deps
           )

从命令行使用 Meson 设置构建目录:

meson setup builddir

这应该表明已找到依赖项,例如:

Native dependency gee-0.8 found: YES 0.18.0

然后使用忍者建造构建项目:

ninja -C builddir

对于任何使用 Fedora 的人ninja is ninja-build.

Meson 设置构建目录的任何问题都会记录到builddir/meson-logs/meson-log.txt.

如果这有效,但在 GNOME Builder 中失败,那么我唯一的想法是 GNOME Builder 是使用 Flatpak 安装的。 Flatpak 的沙盒环境可能会影响对依赖项的访问。

Update:根据评论中的讨论,GNOME Builder 使用的运行时似乎是问题所在。 Builder 的一个强大功能是能够选择用于构建软件的 Flatpak 运行时。如果您遵循在工作站上安装库和头文件的“传统”开发方式,请确保主机操作系统选择而不是 Flatpak 运行时。 GNOME Flatpak 运行时似乎不包含 libgee。

Update2:当编写 Flatpak 构建器清单并且依赖项不在 Flatpak 运行时/SDK 中时,请将该依赖项添加为 Flatpak 构建器清单中的另一个模块。这允许 GNOME Builder 使用 Flatpak 通过 Flatpak 运行时构建软件。 AsymLabs 答案中给出了示例清单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flatpak Meson 没有从 Gnome Builder 中找到 Vala 库 的相关文章

随机推荐

  • MySQL中如何存储科学计数法数字

    我想在 MySql 中存储科学记数法数字 我已将它们保存到具有数据类型的字段中decimal 问题是它以正常表示法存储它 至少当我在 MAMP 附带的 Web 控制台中查看数字时看起来是这样 因此您需要为该字段分配更多字节 我相信这会导致拥
  • WebAPI / Owin - 登录后身份未授权

    我正在使用 WebAPI Owin 3 0 实现简单的登录 密码身份验证 这是我的配置方法 public void ConfigureAuth IAppBuilder app Configure the db context and use
  • C++ 类成员的默认值是多少

    C 中结构成员和类成员的默认值是什么 这些规则有何不同 例如 类 结构 基元 等之间 关于默认值的规则是否存在不同的情况 在 C 中 结构和类在这方面没有区别 他们都被称为只是类别类型 一般情况下 类类型的成员没有默认值 为了让类成员获得确
  • Rust 中 tribonacci 序列的惯用实现

    我是 Rust 新手 但作为 Haskell 的粉丝 我非常欣赏这种方式match在 Rust 中工作 现在 我面临着一种罕见的情况 我确实需要失败 从某种意义上说 我希望执行几个重叠案例的所有匹配案例 这有效 fn options sta
  • 有没有一种 CSS 方法可以保证正方形适合窗口而不滚动?

    我可以在 JavaScript 中轻松完成此操作 但想知道是否可以使用直接 CSS 在窗口中保留一个适合窗口大小的方形 div 无论它是什么 我发现的任何解决方案都不能解决高度小于宽度的问题 从逻辑上讲 我想要的是 当窗口宽度小于高度时 给
  • 仅保存活动工作表的宏

    在下面的代码中 它保存了完整的工作簿 我只想保存活动工作表 Sub sbVBS To SAVE ActiveWorkbook ActiveWorkbook Save End Sub 将工作表复制到任何位置都会自动在前台创建一个新工作簿 并将
  • 致命:git 的构建不支持 git-add--interactive (NO_PERL=1)

    当我执行 git add i 时 它会弹出此错误 致命 git 的构建不支持 git add interactive NO PERL 1 我迫切需要帮助 使用 Git 2 25 2020 年第一季度 五年后 Perl 不应再成为git ad
  • chrome vs FF/IE/Opera 在计算表格单元格宽度时? (表格布局:固定)

    我现在已经搜索了差不多半天了 但我找不到为什么chrome6 7似乎是与IE8 FF3 6 Opera相比唯一不添加填充到指定宽度的浏览器一个表格单元格的 当然 如果您使用 table layout fixed 这变得至关重要 因为他们突然
  • 为什么我网站上的所有 html 表单都禁用 Internet Explorer 自动完成功能?

    当为表单打开 Internet Explorer 自动完成功能时 HTML 表单中每个字段的条目应被缓存 并在用户第二次开始在表单中输入内容时显示为提示 在我的网站上 该网站上存在的任何表单都不会显示自动完成功能 但其他网站却毫无问题地保留
  • 根据数据表值在 gridview 中设置复选框

    我有一个带有复选框字段和几个绑定字段的 gridview 控件 复选框字段不直接映射到数据库中的字段 相反 我想从数据库中的字段读取值并 选中 一些复选框 例如 给定数据库中的以下数据 gt 数据表 PROCESSED NAME DATE
  • mongoDB 32位2GB限制,最佳实践

    Mongo 新手 在 Windows XP 上运行 32 位 Mongo 2 0 1 目前没有运行 64 位的选项 我想使用 Mongo 来映射减少一组 60 个文件 每个文件都是同一个 20 000 行 x 100 列表的每月快照 理想情
  • Rails 如何显示父对象的属性

    我正在尝试使用 Rails 4 制作一个应用程序 我有 2 个表 user rb 和 profile rb User has one profile Profile belongs to User 用户具有名为 first name 和 l
  • 在函数中传递未知数量的参数

    在我当前的项目中 我必须实现多个函数来处理不同数量的UITextField在我的应用程序的多个屏幕中 我想如果我可以实现一个可以接受任意数量的函数 那么效率会更高UITextField 是否可以在 swift 3 上实现这些功能 Swift
  • ImportError:当我使用系统运行服务时,没有名为“schedule”的模块

    我写了一个脚本叫coinview py它可以运行在linux 当我尝试将其运行为systemd 它会引发错误 error ImportError No module named schedule I use pip3显示时间表 它已经存在
  • 上传文件时未定义索引

    这是我的错误 注意 未定义索引 文件中 C xampp htdocs Project Template1 users index php 第 21 行 注意 未定义索引 文件输入 请在第 23 行 C xampp htdocs Projec
  • 将电子邮件输入到我的 python/flask 应用程序代码中的第一步是什么?

    我正在研究如何制作一个可以直接与电子邮件交互的网络应用程序 就像你会发送到 电子邮件受保护 应用程序会将其分解并确定它来自谁 它们是否在数据库中 主题行是什么等 我正在使用 最熟悉Python和Flask 谁能帮助我开始正确的方向 如何让电
  • 编译/缩小的 jsx 文件比原始文件大

    去掉所有空格后 原始jsx文件大小为189k 编译 缩小后的文件大小 js 为 217k 没有任何依赖项 我已经使用了所有 webpack babel 优化来缩小代码大小 treeshaking 除外 我计划缩短成员变量 函数名称以减少文件
  • 如何使用 XPage Java 代码在自定义控件内设置输入控件的有效方法?

    好吧 这很奇怪 在 XPage 中 我的数据源是一个 Java 对象 托管 bean 或 PageController 我通过 Ext 来使用引导程序 图书馆 我想要做的是将所有验证代码保留在 Java 对象中 而不是将任何内容附加到 XP
  • t-sql,sql表内连接电子表格

    我有一个数据表 AmenityData 该表的一列包含邮政部门 例如E14 7 我还有一个 Excel 电子表格 其中包含邮区列表 例如E14 我需要从 AmenityData 表中获取所有数据 其中邮政区就像邮政部门 例如其中 Posta
  • Flatpak Meson 没有从 Gnome Builder 中找到 Vala 库

    在 Linux 中 我在 Gnome Builder 3 26 4 中使用 Meson 0 44 0 作为将使用 Gee 和 GXml 的控制台程序 我的目的是在 Genie 中写这个 当我在 Gnome Builder 中使用 Meson