2

Visual Studio 2015 を使用して、FFTW を使用するプロジェクトをコンパイルしようとしています。残念ながら、FFTW Web サイトのプリコンパイル済みバイナリは、次の問題により VS 2015 と互換性がありません:未解決の外部シンボル __imp__fprintf および __imp____iob_func, SDL2。コンパイルしようとすると、リンク エラーが発生します。

互換性のあるバージョンをコンパイルする方法についてのアドバイスを探しています。明らかな答えは、VS 2015 で FFTW を再コンパイルすることですが、Visual Studio でコンパイルする方法についての指示がまったく見つかりません。それを行うのは難しいという提案がたくさんあります。標準バージョンは MinGW でコンパイルされており、その方法についての説明が提供されています。しかし、MinGW は VS 2015 と互換性のあるライブラリを作成できますか? それに関する情報も見つかりませんでした。

4

2 に答える 2

1

私は最終的にこれを自分で理解することができました。私は Visual Studio の専門家ではないので、最善の方法で行ったとは約束しませんが、うまくいきました。後世の利益のために、ここに私がやったことがあります。

まず、config.h.in を複製します。新しいコピー config.h を呼び出します。手動で編集して、生成するライブラリのオプションを設定します。使用する精度モード、コンパイルするベクトル命令セット (存在する場合)、さまざまなタイプのサイズ (計画するかどうかによって異なります)。 32 または 64 ビット モードでコンパイルする)、スレッド サポートを含めるかどうかなど。

空の VS プロジェクトを作成します。ソースフォルダーの最上位に配置することをお勧めします。次に、ソリューション エクスプローラーで、上部にある [すべてのファイルを表示] アイコンをクリックします。これにより、ソリューション エクスプローラーからファイルを直接追加または除外できるため、次の手順が簡単になります。

[プロジェクト プロパティ] ウィンドウを表示します。設定する必要がある多くのオプションがあります。

一般に、「構成タイプ」を静的ライブラリーに設定します。(または、DLL が必要な場合は動的ライブラリに設定できますが、必要なシンボルをエクスポートする方法を理解する必要があります。静的ライブラリが必要だったので、私はそれをしませんでした。)

VC++ ディレクトリで、「インクルード ディレクトリ」を編集します。次のディレクトリを追加します (「(source dir)」をソースを含む実際のディレクトリに置き換えます)。

(source dir)
(source dir)\api
(source dir)\dft
(source dir)\rdft
(source dir)\reodft
(source dir)\kernel
(source dir)\simd-support
(source dir)\dft\simd
(source dir)\dft\scalar
(source dir)\rdft\simd
(source dir)\rdft\scalar

スレッド サポートを含める場合は、[C/C++] > [言語] で [Open MP サポート] を [はい] に設定します。

AVX サポートを含める場合は、[C/C++] > [コード生成] で、[拡張命令セットを有効にする] を AVX に設定します。つまり、生成したライブラリは、AVX をサポートしていないコンピューターでは動作しません。AVX を使用する個々のソース ファイルに対してのみこのオプションを設定することで、この制限を回避できる場合があります。それについてはよくわかりません。

[C/C++] > [出力ファイル] で、[オブジェクト ファイル名] を に設定し$(IntDir)/%(RelativeDir)/ます。(FFTW には同じ名前のファイルがたくさんありますが、ディレクトリは異なります。デフォルトでは、VS はすべてのオブジェクト ファイルを同じディレクトリに配置しますが、これは機能しません。)

これで、ソース ファイルをプロジェクトに追加する準備ができました。これを行うには、ソリューション エクスプローラーで右クリックし、[プロジェクトに含める] を選択します。次のフォルダーにすべての .c ファイルを追加する必要があります。

api
dft
dft/scalar
kernel
rdft
rdft/scalar
reodft

スレッド化のサポートが必要な場合は、threads.cを除くすべてのソース ファイルを「threads」に追加する必要があります。(これには pthreads バージョンが含まれています。)

ベクトル命令セットのサポートが必要な場合は、次のフォルダーから必要な特定の命令セットに関連するファイルのみを含める必要があります。

dft/simd
rdft/simd
simd-support

おそらく、mpi サポートが必要な場合は、ファイルを「mpi」に含めます。私はそれをしなかったので、それを機能させるために他に必要なものがあるかどうかはわかりません。

必要なバイナリの種類に応じて、構成を「Release」に設定し、「x86」または「x64」に設定してください。

さて、重要なことを何も忘れていなければ、ライブラリをコンパイルできるはずです。

于 2016-03-04T18:59:22.063 に答える