外部プロジェクトからの BlinkGTK 統合ガイド

バージョン: 1.2.6-build1 (Chromium 157.0.8103.38)

別のプロジェクト(独自アプリ、3D ビュワー、EPUB リーダー等)から BlinkGTK を
描画エンジンとして利用する開発者向けのガイドです。

対象: BlinkGTK 本体のソースを改変せず、C API / pkg-config 経由で BlinkGTK を
リンクして使う
開発者。


1. 配布の形

BlinkGTK はバイナリパッケージ (RPM / DEB / tarball) で配布しています。Chromium のソースは要らず、
ビルドの設定は pkg-config で取れます。インストール先は固定です (別の場所に置く場合は 3 節)。


2. バイナリパッケージからの統合

2.1 インストール

# Fedora / RHEL(RPM)
sudo dnf install ./blinkgtk-release-*.noarch.rpm ./blinkgtk-bin-1.2.6-build1.fc45.x86_64.rpm

# Debian / Ubuntu(DEB)
sudo dpkg -i ./libblinkgtk-0.1-0_1.2.6-build1-1_amd64.deb \
              ./libblinkgtk-0.1-dev_1.2.6-build1-1_amd64.deb

# 汎用 tarball
tar xjf blinkgtk-1.2.6-build1-linux-x86_64.tar.bz2
cd blinkgtk-1.2.6-build1-linux-x86_64
sudo ./install.sh   # デフォルト /usr/local

2.2 pkg-config で確認

pkg-config --cflags blinkgtk-0.1
# → -I/usr/include/blinkgtk-0.1 -I/usr/include/gtk-4.0 ...

pkg-config --libs blinkgtk-0.1
# → -lblinkgtk -lgtk-4 -lglib-2.0 ...

2.3 最小アプリのビルド

// myapp.c
#include <blink_gtk/blink_gtk.h>
#include <gtk/gtk.h>

static void on_activate(GtkApplication* app, gpointer user_data) {
    GtkWidget* win = gtk_application_window_new(app);
    gtk_window_set_default_size(GTK_WINDOW(win), 1024, 768);

    GtkWidget* view = blink_web_view_new();
    gtk_window_set_child(GTK_WINDOW(win), view);

    blink_web_view_load_uri(BLINK_WEB_VIEW(view),
                            "https://example.com");
    gtk_window_present(GTK_WINDOW(win));
}

int main(int argc, char** argv) {
    blink_gtk_init(&argc, &argv);  /* GTK4 は引数なし */
    GtkApplication* app = gtk_application_new(
        "com.example.myapp", G_APPLICATION_DEFAULT_FLAGS);
    g_signal_connect(app, "activate", G_CALLBACK(on_activate), NULL);
    /* BlinkGTK は Chromium のブラウザメインループを回す必要がある。
     * g_application_run() ではそれが回らず、ページが読み込まれない
     * (navigation が commit しない)。register → activate →
     * blink_gtk_run_main_loop() の順にする。
     */
    GError *error = NULL;
    if (!g_application_register(G_APPLICATION(app), NULL, &error)) {
        g_printerr("アプリケーションの登録に失敗しました: %s\n", error ? error->message : "不明なエラー");
        g_clear_error(&error);
        g_object_unref(app);
        return 1;
    }
    g_application_activate(G_APPLICATION(app));
    int rc = blink_gtk_run_main_loop();
    g_object_unref(app);
    blink_gtk_shutdown();
    return rc;
}

include は blink_gtk.h のみです。 v1.2.0-build5 までは GObject 化以前の
内部ヘッダ blink_web_view.h も同梱されていましたが、blink_gtk.h と同時に
include すると conflicting types for 'BlinkWebView' でコンパイルできないため、
それ以降は同梱していません。

cc myapp.c -o myapp $(pkg-config --cflags --libs blinkgtk-0.1 gtk4)

2.4 実行

./myapp

重要: BlinkGTK は Chromium のリソースファイル(ICU データ、V8 スナップショット、
ロケール)を、既定では実行ファイルの隣のディレクトリから読み込みます。
別の場所に置く場合は、blink_gtk_init() より前に場所を指定してください。

/* blink_gtk_init() より前に呼ぶ */
blink_gtk_set_resources_path("/usr/lib64/blinkgtk-0.1/chromium");

指定しないまま実行ファイルと別の場所に置くと、起動時に
Invalid file descriptor to ICU data received で異常終了します。
配置については下記の「リソースファイルの配置」も参照してください。


3. リソースファイルの配置

アプリをパッケージのインストール先とは別の場所に置いて実行する場合は、以下のファイルを
実行バイナリと同じディレクトリに置くか、blink_gtk_set_resources_path() でその場所を指定してください。

3.1 必須ファイル

ファイル 役割 欠如時の症状
icudtl.dat ICU 国際化データ FATAL: Couldn't mmap icu data file
content_shell.pak UI リソース FATAL: LoadFromPath failed
v8_context_snapshot.bin V8 起動高速化 FATAL: Error loading V8 startup snapshot
snapshot_blob.bin V8 初期ヒープ V8 バージョン不一致で SIGTRAP
locales/ ディレクトリ UI 多言語(ja.pak, en-US.pak 等) 起動可能だが翻訳が欠落

3.2 GPU モード別の追加ファイル

SwiftShader モード (BLINKGTK_GPU_MODE=swiftshader):

ファイル 役割
libEGL.so ANGLE EGL 実装
libGLESv2.so ANGLE GLES2 実装
libvk_swiftshader.so SwiftShader Vulkan
vk_swiftshader_icd.json Vulkan ICD マニフェスト

EGL ネイティブモード (BLINKGTK_GPU_MODE=egl):

システムの EGL / GL ライブラリを使用するため、追加ファイルは不要です。
ただしシステムに Wayland 対応の EGL ドライバ(Mesa, NVIDIA 等)が必要です。

3.3 配置ヘルパースクリプト(将来提供予定)

# 将来提供: Chromium ビルドから必要ファイルを抽出
scripts/setup-dev-env.sh \
  --chromium-src=/path/to/chromium/src \
  --target-dir=/path/to/your/app/runtime

4. GPU モードの選び方

BLINKGTK_GPU_MODE 環境変数で切替できます。未設定時は software。

モード 画面描画 用途
software 対応 ヘッドレス・サーバ・CI・低スペック環境
swiftshader 対応 仮想マシン・GPU が無い環境・安定優先
egl 対応 デスクトップ・GPU がある環境。v1.2.0-build2 以前は白画面 (次の版で解消)

詳細は GPU モード解説 を参照。


5. よくあるつまずきポイント

5.1 「白画面で何も表示されない」

原因候補:

確認方法:

# blink_gtk_init が完了した行と、画面へ渡した行が出ているか
./myapp 2>&1 | grep -E "blink_gtk_init|FATAL|set_dmabuf_pixels"

5.2 「ICU データがロードできない」

リソースファイルが実行バイナリ隣接にない。icudtl.dat をコピーするか、
blink_gtk_set_icu_data_path() で明示指定。

blink_gtk_set_icu_data_path("/opt/myapp/icudtl.dat");
blink_gtk_init(&argc, &argv);  /* GTK4 は引数なし */  // 必ず init より前に呼ぶ

5.3 「pkg-config で blinkgtk-0.1 が見つからない」

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
pkg-config --list-all | grep blinkgtk

tarball インストールの場合はインストール先の lib/pkgconfig を
PKG_CONFIG_PATH に追加してください。


6. トラブルシューティング・参考


7. 質問・バグ報告