2015年9月28日月曜日

mingw-g++ でスタティックリンクしたいんです

gcc ではなく、g++ でないといけなかったんです。

$ g++ b.cpp

$ od a.exe
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll
        DLL Name: libgcc_s_dw2-1.dll
        DLL Name: libstdc++-6.dll

od は、bash で  function od() { objdump -p $1 | grep "DLL Name"; }

いくつか mingw 由来と思われる DLL への参照が有ります。

$ g++ b.cpp -static

ビルドは通りました。

$ od a.exe
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll

おお。結果は満足するものになりました。

mingw-gcc (C言語) でスタティックリンクをしたい

例えば、libpng をスタティックリンクしたいんで。

$ gcc a.c
C:\msys32\tmp\ccUYzSGl.o:a.c:(.text+0x2a): undefined reference to `png_init_io'
collect2.exe: error: ld returned 1 exit status

-lpng が必要。

$ gcc a.c -lpng

ビルドは通りました。

$ od a.exe
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll
        DLL Name: libpng16-16.dll


od は、bash で  function od() { objdump -p $1 | grep "DLL Name"; }

libpng16-16.dll への参照が発生しました。これではダイナミックリンクになり、多数のファイルの配布が必要になってしまいます。

$ gcc -lpng a.c
C:\msys32\tmp\ccoKX062.o:a.c:(.text+0x2a): undefined reference to `png_init_io'
collect2.exe: error: ld returned 1 exit status

a.c の前につけたらダメですか。

$ gcc a.c -lpng -static
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x139b): undefined reference to `crc32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x13ee): undefined reference to `crc32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x2725): undefined reference to `adler32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x2739): undefined reference to `adler32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x2766): undefined reference to `crc32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x277a): undefined reference to `crc32'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(png.o):(.text+0x1c62): undefined reference to `inflateReset'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngread.o):(.text+0x4b78): undefined reference to `inflateEnd'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x2fd): undefined reference to `inflateReset2'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x332): undefined reference to `inflateInit2_'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x4e8): undefined reference to `inflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x68a): undefined reference to `inflateReset'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0xab7): undefined reference to `inflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x49f8): undefined reference to `inflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x4ab6): undefined reference to `inflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngrutil.o):(.text+0x5486): undefined reference to `inflateReset'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwrite.o):(.text+0x1aba): undefined reference to `deflateEnd'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0x61a): undefined reference to `deflateInit2_'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0x662): undefined reference to `deflateEnd'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0x6f2): undefined reference to `deflateReset'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0xba5): undefined reference to `deflate'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.2.0/../../../../lib\libpng.a(pngwutil.o):(.text+0x2d7b): undefined reference to `deflate'
collect2.exe: error: ld returned 1 exit status

zlib が必要だそうです。

$ gcc a.c -lpng -lz -static

ビルドは通りました。

$ od a.exe
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll


スタティックリンクになりました。

$ gcc a.c -lpng -static -lz
$ gcc a.c -static -lpng -lz
$ gcc -static a.c -lpng -lz

-static の順序に関係なく、スタティックリンクになりました。

しかしこれで満足していません。追加で調査が必要です。。。

2015年9月9日水曜日

Cygwinでpopplerをビルド

autoreconf を実施する度にエラーが発生致します。先に必要なパッケージを準備致します。

pkgconfig
gettext
libtool
libfontconfig-devel
libjpeg-devel
libtiff-devel
libopenjpeg-devel
libcurl-devel

libtoolize 実行

./configure --enable-zlib --enable-libcurl --prefix=$HOME/poppler

export LANG=C

make

2015年9月5日土曜日

IIS 8.0 で、HTTP Error 403.18

IIS 8.0 で、HTTP Error 403.18

悩みました。

仮想ディレクトリの上に、更に Web アプリを重ねると、こういうエラーが出ます。たとえば、

例として、C:\inetpub\wwwroot\kagemai-0.8.8\html を参照する為、kagemai という名称の仮想ディレクトリを作成します。この後、Web アプリを変換ではなく、作成します。

通常、こういう事はできないのですが、PowerShell をつかうとできてしまいます。

仮想ディレクトリのアプリケーションプール(親ディレクトリのアプリケーションプール)と、Web アプリのアプリケーションプールが異なる場合に、出ます。

一旦、Web アプリを削除して、仮想ディレクトリも削除します。その後、直接、Web アプリを作成します。

New-WebVirtualDirectory に続けて ConvertTo-WebApplication を実行すると、こういう変な状態になりました。
直接、New-WebApplication を呼ぶと、いけました。