X11 bindings for D いじり。
誰か既に書いてておかしくない気もするのだが、何故か見あたらないので書いた。D言語使いの人って Windows ユーザに多いからだろか。
一応まとめてアップ。tinywm.d も同梱。
http://konbu.s13.xrea.com/lib/d/libdx11-20070810.tar.bz2
import Xlib;
してる hoge.d をコンパイルするには
% dmd Xlib*.d hoge.d -L-lX11 -L-L/usr/X11R6/lib
と。たぶんそれが無難かなーと思う。
ごちゃごちゃしてたのでいくつかに切り分けた。
Xlib.d (ライブラリのトップレベル、あといくつかDから呼ぶのに便利めな関数を定義したり), Xlib_types.d (型定義), Xlib_define.d (定数定義), Xlib_funcs.d (関数定義)。
試しにライブラリ化してみた。DMD_HOME/src/phobos/linux.mak など参考に。
% dmd -c -w Xlib.d % dmd -c -w Xlib_define.d % dmd -c -w Xlib_funcs.d % dmd -c -w Xlib_types.d % ar rv libdx11.a Xlib.o Xlib_define.o Xlib_funcs.o Xlib_types.o ar: libdx11.a を作成します a - Xlib.o a - Xlib_define.o a - Xlib_funcs.o a - Xlib_types.o %
一応 tinywm.d をコンパイルできることは確認。
% dmd tinywm.d -L-lX11 -L-L/usr/X11R6/lib -L-ldx11 -L-L. gcc tinywm.o -o tinywm -m32 -lX11 -Xlinker -L/usr/X11R6/lib -ldx11 -Xlinker -L. -lphobos -lpthread -lm %
ただまあ問題があって、-ldx11
を tinywm.o の前にもってくるとコンパイルできない。
% gcc -ldx11 tinywm.o -o tinywm -lX11 -L/usr/X11R6/lib -L. -m32 -lphobos -lpthread -lm tinywm.o(.data+0x30): undefined reference to `_D4Xlib12__ModuleInfoZ' tinywm.o(.gnu.linkonce.t_Dmain+0x49): In function `_Dmain': : undefined reference to `_D4Xlib13DXOpenDisplayFAaZPS10Xlib_types9_XDisplay' tinywm.o(.gnu.linkonce.t_Dmain+0x68): In function `_Dmain': : undefined reference to `_D10Xlib_funcs17DefaultRootWindowFPS10Xlib_types9_XDisplayZk' tinywm.o(.gnu.linkonce.t_Dmain+0x88): In function `_Dmain': : undefined reference to `_D4Xlib16DXStringToKeysymFAaZk' collect2: ld はステータス 1 で終了しました %
libdx11.a 内に定義がある関数が見えないとか言う。なんだろうこれ。-lX11, -lphobos なんかはもちろん、順序を変えてもコンパイル通る。
なんかよくわからんけど、ライブラリファイルの作り方を間違えてるみたいだ。まあ、別にライブラリ書きたいわけじゃなくて X11 いじりたいだけなんだから、dmd Xlib*.d hoge.d
でいいやという気分になってきた。ライブラリっぽくしたとしても、-L-ldx11
とか書かなきゃいけないんだし似たようなもんだ。どうせ基本 make だし。
とりあえず、ちまちま修正しながら使う程度にはできたかなあと思った。さて。ウィンドウマネージャーを書こうか。書かないかも。