Проблема создания привязок vala (vapi) для libui - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь написать файл VAPI для использования libui (https://github.com/andlabs/libui) в Vala. Это моя первая попытка:

[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();
}

А это тестовый код на вале:

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 это:

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

Как мне сделать этот набор memset в vala или встроить его в файл vapi?

1 Ответ

0 голосов
/ 09 января 2019

Ваш первый вопрос по неопределенным ссылкам:

Насколько я понимаю, libui не предоставляет файл libui.pc для pkg-config. Поэтому вы должны указать компилятору 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: Возможно, вы захотите избавиться от префиксов ui * в вашем vapi-файле и использовать вместо этого пространство имен.

...