Ruby mswin32拡張ライブラリィMSVCR80版ビルド覚書き No.2

本日分

なかむら(う)さん経由で公開されているpdcurses-2.60-1からビルド -> OK

MakeFileはあるものの、installタスクのデフォルトの展開先が /usr/local なので、Windowsでは適当なディレクトリを指定しないと必ずコピーが失敗する。また、マニフェストが埋め込まれないので、ビルド後に以下のようにmt.exeを利用してマニフェストを作成したdllに埋め込む必要がある(SxSのライブラリィはLoadLibrary時にマニフェストは自動的に読み込まれないので、埋め込まないと依存性の解決に失敗する

mt -manifest pdcurses.dll.manifest -outputresource:pdcurses.dll;2
  • iconv

なかむら(う)さん経由で公開されているMeadowy.orgのiconv-1.8.win32.zipは当然ながらバイナリのみの配布であり、iconv.dllはMSVCRT.DLLにリンクしている。
なのでソースコードを以下からダウンロードしてビルド -> OK。
LibIconv for Windows - gnuwin32.sourceforge

Win32 VC++用のMakeFileはあるものの、VC++4〜6までに対応するものであり、VC++8(2005)だと対応していないオプションがあるためcl.exeが止まる。不要なオプションをコメントアウトして修正。

# "-GD" (msvc5) optimizes for DLL.
# mscv4 doesn't know about this flag and ignores it.
# -DBUILDING_LIBICONV: Change expansion of LIBICONV_DLL_EXPORTED macro.
# -DBUILDING_DLL: Change expansion of RELOCATABLE_DLL_EXPORTED macro.
#PICFLAGS = -GD -DBUILDING_LIBICONV -DBUILDING_DLL -DPIC

「# "-GD" (msvc5) optimizes for DLL.」とあるので、使わなくとも良いだろうと勝手に判断。

installタスクではデフォルトでc:\usrというディレクトリを作ってインストールするので、適宜変更する必要がある。あと、pdcurses同様にマニフェストの埋込みは手動で実施する必要がある。

今日はここまで。2つしか進まなかった。

#しかし..そもそもiconvってWindowsで必要あったんだろうか。