首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为libui创建vala绑定(vapi)的问题

为libui创建vala绑定(vapi)的问题
EN

Stack Overflow用户
提问于 2019-01-09 21:15:06
回答 1查看 112关注 0票数 1

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

代码语言:javascript
复制
[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编写的测试代码:

代码语言:javascript
复制
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):未定义的对` `uiInit‘的引用

在示例中,libui的C代码如下:

代码语言:javascript
复制
int main(void)
{
uiInitOptions o;
const char *err;
memset(&o, 0, sizeof (uiInitOptions));
err = uiInit(&o);
...
}

如何在vala中生成这个memset内容,或者将其构建到vapi文件中?

EN

回答 1

Stack Overflow用户

发布于 2019-01-09 23:12:32

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

据我所知,libui没有为pkg-config提供libui.pc文件。

代码语言:javascript
复制
valac --vapidir . --pkg libui -X -lui main.vala

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

你不需要清零内存,valac无论如何都会自动清零。您可以在生成的代码中看到这一点,您可以使用以下命令获得这些代码:

代码语言:javascript
复制
valac --vapidir . --pkg libui -C main.vala

这里有一个memset:

代码语言:javascript
复制
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*前缀,而使用名称空间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54111024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档