gpt4 book ai didi

sqlite - 在不依赖 glib 的情况下使用来自 vala 的 sqlite

转载 作者:行者123 更新时间:2023-12-03 15:17:09 26 4
gpt4 key购买 nike

我需要在不依赖 GLib 的情况下使用 Sqlite vapi。 SQlite 是非 gobject 库,因此应该可以这样做。

但是,当我尝试使用 --profile posix 编译以下文件时
选项,

using Sqlite;

void main() {
stdout.printf("Hello, World!");
}

我收到错误消息:
sqlite3.vapi:357.56-357.59: error: The symbol `GLib' could not be found
public int bind_blob (int index, void* value, int n,
GLib.DestroyNotify destroy_notify);
^^^^
sqlite3.vapi:362.68-362.71: error: The symbol `GLib' could not be found
public int bind_text (int index, owned string value, int n = -1,
GLib.DestroyNotify destroy_notify = GLib.g_free);
^^^^
sqlite3.vapi:411.42-411.45: error: The symbol `GLib' could not be found
public void result_blob (uint8[] data, GLib.DestroyNotify?
destroy_notify = GLib.g_free);
^^^^
sqlite3.vapi:420.59-420.62: error: The symbol `GLib' could not be found
public void result_text (string value, int length = -1,
GLib.DestroyNotify? destroy_notify = GLib.g_free);
^^^^
Compilation failed: 4 error(s), 0 warning(s)

似乎在 sqlite vapi 中定义的几个函数引用了 GLib.g_freeGLib.DestroyNotify符号。是否有任何posix替代品?

最佳答案

这应该很容易解决,我可以想象几种解决方案。

它归结为声明不同的委托(delegate) void DestroyNotify (void* data)(在 posix.vapi 或 sqlite3.vapi 中)并在 posix.vapi 中绑定(bind) free()。

问题在于命名空间,您可能需要提交错误并与开发人员讨论。如果您想避免此问题并准备好解决方法,只需创建一个 mini glib.vapi GLib 命名空间,在其中仅绑定(bind) DestroyNotify() 和 g_free()(绑定(bind)到 libc/posix free)。

我认为 sqlite3 不应该使用 GLib,而应该使用 libc/posix,所以你应该只修改 posix.vapi 和 sqlite3.vapi 并用你的补丁提交一个错误(太棒了,一个贡献者!)。

关于sqlite - 在不依赖 glib 的情况下使用来自 vala 的 sqlite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3034425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com