【问题标题】:Problem on creating vala bindings (vapi) for libui为 libui 创建 vala 绑定 (vapi) 的问题
【发布时间】:2019-01-09 13:15:06
【问题描述】:

我正在尝试编写一个 VAPI 文件以在 Vala 中使用 libui (https://github.com/andlabs/libui)。 这是我的第一次尝试:

[CCode (cheader_filename = "ui.h")]
namespace LibUi {

[CCode (cname = "uiInitOptions", cprefix = "ui", has_type_id = false)]
public struct uiInitOptions {
    size_t Size;
}

[CCode (cname = "uiInit", has_type_id = false)]
public char uiInit(uiInitOptions options);
[CCode (cname = "uiMain", has_type_id = false)]
public void uiMain();
[CCode (cname = "uiQuit", has_type_id = false)]
public void uiQuit();
}

这是vala中的测试代码:

using LibUi;

public static int main (string[] args) {
uiInitOptions o = uiInitOptions();
uiInit(o);
return 0;
}

使用“valac --vapidir .--pkg libui main.vala”编译
带来这个错误:
main.vala.c:(.text+0x3c): undefined reference to `uiInit'

在 libui 的示例 C 代码中是这样的:

int main(void)
{
uiInitOptions o;
const char *err;
memset(&o, 0, sizeof (uiInitOptions));
err = uiInit(&o);
...
}

如何在 vala 中制作这个 memset 内容或将其构建到 vapi 文件中?

【问题讨论】:

  • 欢迎来到stackoverflow。您在这里同时针对至少两个问题提出问题。以后每一个问题,请只问一个问题。它有助于更​​好地组织网站。

标签: vala vapi


【解决方案1】:

关于未定义引用的第一个问题:

据我所知,libui 没有为 pkg-config 提供 libui.pc 文件。因此,您必须告诉 vala 编译器像这样链接 libui.so 库:

valac --vapidir . --pkg libui -X -lui main.vala

现在关于 memset 的第二个问题:

您不必将内存归零,无论如何 valac 都会自动执行此操作。您可以在生成的代码中看到:

valac --vapidir . --pkg libui -C main.vala

那里有一个memset:

gint _vala_main (gchar** args, int args_length1) {
    gint result = 0;
    uiInitOptions o = {0};
    uiInitOptions _tmp0_;
    memset (&o, 0, sizeof (uiInitOptions));
    _tmp0_ = o;
    uiInit (&_tmp0_);
    result = 0;
    return result;
}

PS:您可能希望去掉 vapi 文件中的 ui* 前缀,而改用命名空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 2012-06-27
    • 2019-10-14
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多