0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FFTWをWindowsでインストールしようとして詰んだ時の解決策の1つ

Last updated at Posted at 2024-09-24

背景

 FFTWは高速なFFTを実装できるオープンソースの1つです
 FFTW公式サイト

 私もCのコードを高速化するためにFFTWを導入しようとしましたが、Windowsでのインストールに苦戦しました

 公式ドキュメントやブログには、以下のようなインストール方法が紹介されていますが、背景知識が乏しいため、うまくいきませんでした

  • Visual Studioでコンパイル済みdllファイルを導入する
    • →Visual Studioのプロジェクトを作成する必要がありそうで面倒。そもそもコマンドプロンプト上でコンパイルしたい
  • MinGWでFFTWをコンパイルする
    • →MinGWでライブラリをコンパイルする方法がそもそもよくわからない

 そこで、私が試行錯誤の末にたどり着いた方法を記録します

読者の対象

  • CでFFTWを導入したい方(C++も可)

  • WindowsにFFTWをインストールしたい方

  • コマンドプロンプト(Visual Studioを経由しない)でコンパイルしたい方

  • MinGWを補うソフトウェアを導入してもよい方

著者のインストール環境(2024/09時点)

  • Windows 11

  • FFTW 3.3.10-5

インストール方法の要約

 1. MSYS2をインストール

 2. MSYS2 MINGW64のプロンプトでFFTWを含むコンパイルに必要なライブラリをインストール

 3. コマンドプロンプトでCおよびC++のコードをコンパイル

詳細

1.MSYS2をインストール

MSYS(Minimal SYStem)とは

 Windows上でUnixライクな環境を提供するソフトウェアの1つ

 特にMinGW(Minimalist GNU for Windows)との組み合わせでよく使わる

 MSYS2はその後継版


MSYS2を導入する利点

 MinGWはWidowsでCやC++をコンパイルする際にインストールした方も多いでしょう

 MSYS2はそのMinGWの機能を補完するような便利な機能があります

 例えば、パッケージ化されたライブラリをpacmanのコマンドでインストールできます

 そのパッケージインストールの手軽さがMSYS2を導入する利点です


MSYS2のインストール方法

インストーラのダウンロード

1. 公式サイトからインストーラ.exeをダウンロードする
MSYS2 ダウンロードサイト
2024-09-25 04.29.12 www.msys2.org 3f13255005b31.png


インストーラの実行

2. ダウンロードした.exeを実行する

基本デフォルト設定でOK(カスタム可能)

image.png


MSYS2プロンプトの起動

3. アプリ「MSYS2 UCRT64」を開く(タスクバーの虫眼鏡アイコンから検索して開く)
image.png


MSYS2の初期設定

4. 出てきたプロンプトに以下のコマンドを実行して初期設定する

[Y/n]で止まったらYを入力してエンター

pacman -Syu
pacman -Su

image.png

引用:https://www.kkaneko.jp/tools/win/windows_msys2dev.html


MSYS2の環境変数を登録

5. 管理者用コマンドプロンプトを開いて以下のコマンドを1つずつ実行する

powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";C:\msys64\mingw64\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"

powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";C:\msys64\usr\local\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"

powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";C:\msys64\usr\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"

powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";C:\msys64\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"

powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";C:\msys64\opt\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"

image.png

引用:https://www.kkaneko.jp/tools/win/windows_msys2dev.html


環境変数の確認

6.タスクバーの虫眼鏡から「環境変数を編集」を開き、ユーザ環境変数(U)の変数PATHをクリックして「編集(E)...」ボタンを押す
image.png

image.png


MinGWの優先順位を下げる

7. もし、以下のような今までのMinGWのPathがあるのであれば一番下へ移動させる

C:\MinGW\bin

image.png
※これでMSYS2がMinGWより優先的に参照されてうまく動作する

2.MSYS2 MINGW64で必要なライブラリをインストール

MSYS2 MINGW64プロンプトを起動

1. アプリ「MSYS2 MINGW64」を開く(タスクバーの虫眼鏡アイコンから検索して開く)
image.png
image.png

引用:https://www.kkaneko.jp/tools/win/windows_msys2dev.html


コンパイルに必要なパッケージをインストール

2.以下のコマンドを、MSYS2 MINGW64のプロンプトで実行する

pacman -S base-devel msys2-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain mingw-w64-x86_64-boost

FFTWのインストール

3. ブラウザでfftw msysと検索し、Packageサイトのpacmanから始まるコマンドをコピーし、MSYS2 MINGW64のプロンプトで実行する

pacman -S mingw-w64-x86_64-fftw

2024-09-25 05.19.34 www.google.com 882083d3e2dd.png

image.png


4. ほかに必要なライブラリがあれば別途pacmanでインストール

3.コマンドプロンプトでコードをコンパイル

以上の手順をもって、コマンドプロンプトでのコンパイルが可能になります

gcc -o a fftw_code.c -lfftw3 -lm

FFTWを使ってコンパイルする際は、-lfftw3 -lm(double精度)、-lfftw3f -lm(float精度)、-lfftw3l -lm(long double精度)を使ってください

参考文献

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?