libgw32cを使う


gnuWin32プロジェクトにlibgw32というのがある。
glic互換を目指すライブラリなんだが、こいつが非常につかいにくい。

(1)足りないヘッダはglibcからとってきてねってglibcのヘッダがついてくる。
しかしこれをインクルードパスに含めるとconfigureにWindowsでは使えないglibcのヘッダが使えることにされてしまう。
もちろん使えないのでエラーになる。

(2)たとえばstdio.hをインクルードするときは
#include <stdio.h>
#include <stdiox.h>
のように付け足してね♪ なんて書いてあるがこれはいかにも面倒だ。

てわけで 理想の設定を模索してみた。

(1)まず glibcのヘッダファイルの名前を全部 glc_xxxx.hにかえてしまう。
(glibc_ren.sh)
#!/bin/sh
HEADERLIST=`find |grep \.h`

for foo in $HEADERLIST ;do

newfile=${foo%/*}/glc_${foo##*/}
echo $newfile

cp $foo $newfile

for bar in $HEADERLIST ;do
name=${bar##*/}
perl -pe "s/([^a-zA-Z0-9_])$name([^a-zA-Z0-9_])/\1glc_$name\2/g" $newfile>$newfile.tmp
mv $newfile.tmp $newfile
done;
done;

(2)つぎにwinx/????x.hで呼び出してるヘッダファイルの名前に全部glcをつける。
(ligw32_glchead.sh)
#!/bin/sh
HEADERLIST=`find |grep x\.h`
for foo in $HEADERLIST ;do
perl -pe "s/(^\W*#include\W\W*<)([a-zA-Z0-9_\.\/]*\/|)([a-zA-Z0-9_][a-zA-Z0-9_]*\.h\>.*$)/\1\2glc_\3/g" $foo \
|perl -pe "s/(glc_)([a-zA-Z0-9_][a-zA-Z0-9_]*x\.h)/\2/g" - >$foo.tmp
done;
for foo in $HEADERLIST ;do
mv $foo.tmp $foo
done;

mslowiox.hでよびだしてる_mingw.hはglibcのファイルじゃないのでもとにもどす。
mslowiox.h:#include <glc__mingw.h>

(3)????x.hを自動的に呼び出すヘッダxxxx.hをつくる
(libgw32_inc.sh)
# -lgw32c -lole32 -luuid -lwsock32
# -D__GW32__
# If you want to use large file support (i.e. to replace the standard 32 bits msvcrt functions by 64 bits),
# -D__GW32__ -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64

#!/bin/sh

for foo in `find |grep x.h` ;do
mingwinclude="/i/mingw40/include/"
bar=${foo%x.h}.h

if [ ! -f  $bar ] ;then
if [ -f "${mingwinclude}${bar#*/}"  ] ; then
  echo "#include_next <${bar#*/}>" >$bar
fi
echo "#include <${foo#*/}>" >>$bar
fi

done

さてこれで
LIBS="-lgw32c -lole32 -luuid -lwsock32" CC="gcc -O2 -D__GW32__ -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64" ./configure
とかやればうまくいく。

けど動かないソフトもあるなぁ、これは実装されてないダミーの関数とかが結構あるからかなぁ。。。


戻る



このHPの内容に問題等 ありましたらsけいし(skeishi@yahoo.co.jp)までメールを下さい。

sけいし発HP


[PR]ՌIȂ̖{̗̊I:͋M̓ogHŕ^