MinGW 環境で Windows のダイナミックリンクライブラリ *.DLL からインポートライブラリ *.a ファイルを作成する

FFTW を利用するための自分用のメモ*1…なのだが、すこし一般的な話題。MinGW gccWindows の DLL を利用しようとする場合には、*.DLL から *.a ファイルを作成し、これを C:\MinGW\lib ディレクトリに入れておく必要がある。作成の方法は MinGW に含まれている dlltool というコマンド*2を利用する。利用例は以下のとおり

dlltool --dllname libfftw3-3.dll --input-def libfftw3-3.def --output-lib libfftw3-3.a
ここで *.def ファイルが必要になるが*3、その作成の方法は pexports コマンドを利用すればよい*4。利用例は
pexports libfftw3-3.dll > testDef.def
ここで作成した testDef.def を用いても FFTW の(うちの少なくとも1次元複素FFTの)利用ができることは確認した*5。これで libfftw3-3.a さえ出来上がれば、
g95 test.f90 -lfftw3-3
コンパイルすれば、fftw を fortran に組み込んで利用できる。

参考文献:
  1. MSVC のプログラムから MinGW DLL を呼び出すことや、その逆は可能ですか? http://www.sixnine.net/cygwin/translation/mingw-doc/mingwfaq.html#s1-15
  2. dllからインポートライブラリを作成する方法 http://skeishi.web.fc2.com/dev-cpp/tips/dll_import.html

*1:fftw を MinGW gccコンパイルしなさい…というツッコミはいまは無しの方向で。

*2:C:\MinGW\bin\dlltool.exe

*3:FFTW の Windows 用バイナリのパッケージ(Webページ http://www.fftw.org/install/windows.html の fftw-3.2.2.pl1-dll32.zip )には *.def ファイルが同梱されている。

*4:2010.5.5現在、sourceforge の MinGW - Minimalist GNU for Windows のファイル一覧のページを見ると、pexports は MinGW utilities ではなく MinGW pexports (pexports-0.44-1-mingw32-bin.tar.lzma.tar) として独立に配布しているようだ。これをダウンロード、解凍して、pexports.exe を C:\MinGW\bin にコピーする。

*5:この .def ファイルの中身を libfftw3-3.def と比較したら結構、違っている。