1

Visual C++ Express を使用して fftw ライブラリにリンクしようとしていますが、コンパイルしようとするとリンカー エラーが発生します。lib.exeプログラムを使用して.lib「インポートライブラリ」を作成することにより、サイト(http://fftw.org/install/windows.html)が説明しているように、libファイルを生成しました。

.lib ファイルを「Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib」に追加し、fftw3.h を「Program Files (x86)\Microsoft Visual Studio 9.0\VC\include」に追加しました。次に、dll ファイルを「Windows/system32」フォルダーに配置します。ライブラリ (libfftw3f-3.lib、libfftw3-3.lib、libfftw3l-3.lib) をリンカー/入力設定の追加の依存関係に追加してリンクしました。コンパイルしようとすると、次のエラーが発生します。

    process_wav.obj : error LNK2019: unresolved external symbol __imp__fftwf_destroy_plan referenced in function _main
    process_wav.obj : error LNK2019: unresolved external symbol __imp__fftwf_plan_dft_r2c_1d referenced in function _main

スタックオーバーフローを検索しましたが、ほとんどの回答は、ライブラリを追加の依存関係に追加して見つける必要があることを説明しています。コマンド ライン オプションに /verbose:lib を指定すると、次のようになります。

    f
    fdf

1>Linking...
1>Searching libraries
1>    Searching libfftw3f-3.lib:
1>    Searching libfftw3-3.lib:
1>    Searching libfftw3l-3.lib:
1>    Searching F:\Program Files\Mega-Nerd\libsndfile-win32-bin-1.1.7\libsndfile-1.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRTD.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1>    Searching libfftw3f-3.lib:
1>    Searching libfftw3-3.lib:
1>    Searching libfftw3l-3.lib:
1>    Searching F:\Program Files\Mega-Nerd\libsndfile-win32-bin-1.1.7\libsndfile-1.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRTD.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1>    Searching libfftw3f-3.lib:
1>    Searching libfftw3-3.lib:
1>    Searching libfftw3l-3.lib:
1>    Searching F:\Program Files\Mega-Nerd\libsndfile-win32-bin-1.1.7\libsndfile-1.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>Finished searching libraries

ライブラリを見つけたようですが、ライブラリ内の関数名を誰が見つけられるかわかりません。このライブラリも使用している Web サイトからコードを取得しました。興味深いことに、関数名は「fftw3.h」に表示されませんが、これが問題の原因ではないと思います。

今どこに頼ればよいかわからないので、どんな助けでも大歓迎です。

ありがとう。

4

4 に答える 4

3

次の手順は、Visual Studio 2008 で機能します ( http://itkcorner.blogspot.com/2012/01/inclusion-de-fftw-en-visual-studio-2008.htmlから)。

  1. fftw 組織の Web サイト (http://www.fftw.org/install/windows.html) からファイル「fftw-3.3dll32.zip」をダウンロードします。

  2. Visual C++ からこれらの .dll ファイルにリンクするには、.lib の「インポート ライブラリ」を作成する必要があり、VC++ に付属の「lib」コマンドを使用して作成できます。具体的には、以下を実行します: lib /def:libfftw3-3.def

[ツール] > [Visual Studio 2008 コマンド プロンプト] で、プロジェクトを開かずに、Visual だけを開きます。コンソールに入ったら、「cd」コマンドを使用してフォルダーが配置されているルートに移動し、そこで上記の 3 行を実行すると、「lib ファイルが作成されます。

  1. ライブラリが作成されたフォルダーをコピーしてから、それを使用するプロジェクト フォルダー内にコピーし、フォルダーの名前を「FFTW_LIBS」に変更します。このフォルダに必要なファイルは、「<em>.dll」、「</em>.lib」、および「fftw3.h」を含むファイルです。

  2. プロジェクトにライブラリを含める: 「[プロジェクト] > [プロパティ] > [構成プロパティ] > [リンカー] > [エントリ] > [追加の依存関係]」で、3 つの新しいライブラリ ファイルを含めます。

libfftw3-3.lib

  1. ライブラリがあるパスのインクルード: 「プロジェクト > プロパティ > 構成プロパティ > リンカ > 一般 > 追加の libs ディレクトリ」、そこに「./FFTW_LIBS」と記述します。b. 「Project > Properties > Configuration Properties > Depuration > Environment」、そしてそこに「./FFTW_LIBS」と記述します。

  2. 「.dll」ファイルがあるパスを含めます。「プロジェクト > プロパティ > 構成プロパティ > Depuration > 環境」で。変数「環境」では、ファイル「libfftw3-3.dll」の場所を指定する必要があり、「PATH = .\FFTW_LIBS」と記述します。このすべての手順の後、「#include fftw3.h」を追加して使用するだけです。 ftw機能!

于 2012-01-30T08:30:21.310 に答える
0

たぶん実行時に、fftwdllが見つからないかどうかを尋ねられます。
私はそのケースを手に入れ、単にそれらをsystem32フォルダーに入れました。

于 2012-09-19T21:10:41.460 に答える