Windows 11 で FFTW3 をマルチスレッド対応 DLL ビルドする(MSYS2/MinGW)
🎯 対象読者
- Windows 11 環境で FFTW を使いたい人
- Visual Studio / .NET / C++ から FFTW を呼び出したい人
- マルチスレッド対応 DLL (libfftw3-3.dll, libfftw3_threads-3.dll) を作りたい人
1. MSYS2 のインストール
-
MSYS2 公式サイト からインストーラをダウンロード。
→msys2-x86_64-YYYYMMDD.exe - インストール先(例:
C:\msys64)を選択してインストール。 - MSYS2 MSYS ターミナルを起動し、まず全体を更新します:
pacman -Syu
更新後に「ターミナルを閉じて再起動してください」と出たら必ず従う。
2. 開発ツールチェーンの導入
-
MSYS2 MinGW 64-bit ターミナルを起動。
(スタートメニューに「MSYS2 MinGW 64-bit」があります)
必要なパッケージをインストール:
pacman -S --needed base-devel git mingw-w64-x86_64-toolchain
動作確認:
gcc --version
3. FFTW ソースの取得
安定版 tarball を使うのが確実です(例: 3.3.10)。
cd ~/source
curl -LO http://www.fftw.org/fftw-3.3.10.tar.gz
tar xvf fftw-3.3.10.tar.gz
cd fftw-3.3.10
4. ビルドディレクトリ作成
ソース直下でビルドせず専用フォルダを作ります:
mkdir build-mingw64
cd build-mingw64
5. configure
FFTW を マルチスレッド + SIMD 最適化 でビルドします。
このときツールを明示的に指定するのが重要です。
AR=ar RANLIB=ranlib NM=nm STRIP=strip DLLTOOL=dlltool \
CC=gcc CXX=g++ \
../configure \
--host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 \
--prefix=/mingw64 \
--enable-shared --disable-static \
--enable-threads --with-combined-threads \
--enable-sse2 --enable-avx --enable-avx2 \
--with-our-malloc16
主なオプション解説
-
--enable-shared… DLL を生成 -
--disable-static… 静的ライブラリは不要 -
--enable-threads --with-combined-threads… マルチスレッド対応 -
--enable-sse2 --enable-avx --enable-avx2… SIMD 最適化を有効化 -
--with-our-malloc16… FFTW 独自の 16 バイト境界 malloc を使用(SIMD 安定動作)
6. ビルド & インストール
make -j"$(nproc)"
make install
成功すると以下が生成されます(例: C:\msys64\mingw64\bin):
libfftw3-3.dlllibfftw3_threads-3.dll-
libfftw3f-3.dll(float 版, 任意)
7. 確認
スレッド対応が有効か確認するには:
strings /mingw64/bin/libfftw3-3.dll | grep fftw_init_threads
fftw_init_threads が表示されればマルチスレッド対応です ✅
8. 必要な DLL
FFTW をビルドしたあと、アプリ実行時に以下の DLL が必要になります。
-
libfftw3-3.dll
FFTW 本体(double 精度版)。本記事でビルドした DLL。 -
libfftw3_threads-3.dll
--enable-threadsでマルチスレッド機能を有効化した場合に生成されます。
ただし、--with-combined-threadsを付けてビルドした場合はlibfftw3-3.dllにスレッド機能が同梱されるため、この DLL は不要になります。 -
libwinpthread-1.dll
MinGW のスレッドランタイム DLL。マルチスレッド FFT 実行時に必須です。
🎉 まとめ
MSYS2 を使えば Windows 上でも簡単に FFTW3 のマルチスレッド対応 DLL をビルドできます。
.NET や C++ アプリに組み込む際は、fftw_init_threads() を呼んでから fftw_plan_with_nthreads() でスレッド数を指定してください。
📝 ライセンス補足
FFTW は GPL v2 ライセンスで配布されています。
そのため以下の点に注意が必要です:
- オープンソースや研究用途など、ソースコードを公開できる場合は GPL に従って自由に利用可能です。
- ソースコードを公開せずに商用アプリへ組み込む場合は、開発元から 商用ライセンスの購入が必要です。
詳細は FFTW 公式サイトのライセンス情報をご確認ください:
👉 http://www.fftw.org/pricing.html