1

GLibに依存せずにSqlitevapiを使用する必要があります。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はありますか?

4

4 に答える 4

3

これはかなり簡単に解決できるはずで、いくつかの解決策を想像できます。

要約すると、別のデリゲート void DestroyNotify (void* data) (posix.vapi または sqlite3.vapi のいずれか) を宣言し、posix.vapi で free() をバインドします。

問題は名前空間であり、バグを報告して開発者と話し合う必要があるかもしれません。この問題を回避し、回避策を実行する準備ができている場合は、DestroyNotify() と g_free() (libc/posix free にバインド) のみをバインドするミニ glib.vapi GLib 名前空間を作成するだけです。

sqlite3 は GLib ではなく libc/posix を使用するべきだと思います。そのため、posix.vapi と sqlite3.vapi のみを変更し、パッチでバグを報告することで問題ないはずです (すばらしい、contrib!)。

于 2010-06-16T20:57:30.963 に答える
1

あなたが持っている唯一の方法は、sqlite VAPI(または必要なクラス/メソッドだけ)を書き直して、それらをposixフレンドリーにすることです(しかし、そのようにクラスを使用することはできないと思います)。

于 2011-01-14T18:14:01.210 に答える
1

Vala はこれらの機能をサポートするためにサポート ライブラリ (つまり、GLib、Dova) を必要とするため、POSIX プロファイルではクラスを使用できないことに注意してください。Jürg Billeter は、POSIX プロファイルのサポートが実験的で限定的であることを認めています。

https://bugzilla.gnome.org/show_bug.cgi?id=618348

于 2010-11-06T00:14:10.930 に答える
0

sqlite の vapi が glib に依存している場合は、独自の vapi を作成するか、c で sqlite c コードを使用して、必要な関数の extern ステートメントを作成するだけです。たとえば、Linux用のvalaとc、win32用の純粋なc、Mac用の目的のcとcを組み合わせたツールを作成し ましたhttps://github.com/boscowitch/wadoku-notify 必要な2つの関数を私の最初に追加しましたこのようなvalaアプリ:

extern void init_db(char * path,bool mm);
extern void lookup(char * str);

sqlite ソース全体を追加したため、フルテキスト インデックス作成を有効にしてコードを少し変更する必要があり、vala の最初に sqlite vapi がありませんでした。

于 2011-12-19T01:13:50.160 に答える