別のプロジェクト(独自アプリ、3D ビュワー、EPUB リーダー等)から
BlinkGTK を
描画エンジンとして利用する開発者向けのガイドです。
対象: BlinkGTK 本体のソースを改変せず、C API / pkg-config
経由で BlinkGTK を
リンクして使う開発者。
BlinkGTK を外部から利用する方法は 2 つあります。
| 方式 | 対象 | 利点 | 欠点 |
|---|---|---|---|
| A. バイナリパッケージ | 一般開発者・配布 | Chromium ソース不要、pkg-config が使える | インストール先固定 |
| B. Chromium ビルドツリー直接利用 | BlinkGTK 開発者・最新機能追跡 | 最新の BlinkGTK をすぐ試せる | Chromium のフルビルドが必要 |
推奨: まずは 方式 A で試し、深い統合や最新機能が必要になってから方式 B に移行してください。
# Fedora / RHEL(RPM)
sudo dnf install ./blinkgtk-bin-1.0.8-1.fc43.x86_64.rpm
# Debian / Ubuntu(DEB)
sudo dpkg -i ./libblinkgtk-0.1-0_1.0.8-1_amd64.deb \
./libblinkgtk-0.1-dev_1.0.8-1_amd64.deb
# 汎用 tarball
tar xjf blinkgtk-1.2.2-build6-linux-x86_64.tar.bz2
cd blinkgtk-1.2.2-build6-linux-x86_64
sudo ./install.sh # デフォルト /usr/localpkg-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 ...// 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)# パッケージインストール先の bin ディレクトリから実行
/usr/local/blinkgtk-1.0.8/bin/run-with-resources ./myapp重要: BlinkGTK は Chromium リソースファイル(ICU データ、V8 スナップショット、ロケール)を
バイナリ隣接ディレクトリから読み込みます。パッケージ付属のrun-with-resources
スクリプトを使うか、下記の「リソースファイルの配置」を参照してください。
BlinkGTK を third_party/blinkgtk として Chromium
ツリーに配置してビルドしている
開発者向け。
cd /path/to/chromium/src
git clone https://blinkgtk.org/ third_party/blinkgtk
# gn args に is_component_build=true を設定済みとする
autoninja -C out/Release_Component \
third_party/blinkgtk/examples:simple_browser \
libblink_core.so libblink_platform.so libblink_modules.so libv8.so \
content_shell.pak v8_context_snapshot.bin \
locales/ja.pak locales/en-US.pakcd /path/to/chromium/src/out/Release_Component
LD_LIBRARY_PATH=$PWD \
BLINKGTK_GPU_MODE=swiftshader \
./myapp --no-sandbox --no-zygote必ず
out/Release_Componentディレクトリ内から実行してください。
BlinkGTK は起動時に./icudtl.dat,./v8_context_snapshot.bin,
./content_shell.pak,./locales/を参照します。
外部アプリを Chromium
ビルドツリー外で実行する場合、以下のファイルを
実行バイナリと同じディレクトリに配置する必要があります。
| ファイル | 役割 | 欠如時の症状 |
|---|---|---|
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 等) |
起動可能だが翻訳が欠落 |
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
等)が必要です。
# 将来提供: Chromium ビルドから必要ファイルを抽出
scripts/setup-dev-env.sh \
--chromium-src=/path/to/chromium/src \
--target-dir=/path/to/your/app/runtimeBLINKGTK_GPU_MODE 環境変数で切替できます。未設定時は
software。
| モード | 画面描画 | 用途 |
|---|---|---|
software |
対応 | ヘッドレス・サーバ・CI・低スペック環境 |
swiftshader |
対応 | 仮想マシン・GPU が無い環境・安定優先 |
egl |
対応 | デスクトップ・GPU がある環境。v1.2.0-build2 以前は白画面 (次の版で解消) |
詳細は GPU モード解説 を参照。
原因候補:
.pak,
.bin)が見つからず、Blink が初期化されていないGtkOverlay
でないため、フレームピクセルが表示されないblink_web_view_load_uri() を
gtk_widget_realize() より前に呼んでいる確認方法:
# blink_gtk_init が完了した行と、画面へ渡した行が出ているか
./myapp 2>&1 | grep -E "blink_gtk_init|FATAL|set_dmabuf_pixels"blink_gtk_init を含む行が出ない → リソース不足set_dmabuf_pixels を含む行が出ない →
レンダリングパイプライン未起動set_dmabuf_pixels は出るがピクセルが全白 → ロード中の
HTML が空背景の可能性リソースファイルが実行バイナリ隣接にない。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 より前に呼ぶbuild/libblinkgtk.so がセグフォする」build/ はリポジトリルートの 古い Meson
ビルドのモック出力です。
v1.0.1 で Meson
は廃止されましたが、ディスク上に残存している場合があります。
rm -rf build/外部アプリからリンクする場合は、必ず次のどちらかを参照してください。
/usr/lib64/libblinkgtk.soout/Release_Component/libblinkgtk.so。blinkgtk-0.1 が見つからない」export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
pkg-config --list-all |
grep blinkgtktarball インストールの場合はインストール先の
lib/pkgconfig を
PKG_CONFIG_PATH に追加してください。
pkg-config --modversion blinkgtk-0.1)ldd libblinkgtk.so | grep libcontent)BLINKGTK_GPU_MODE の値)./myapp 2>&1 | head -50)