は、完全なサンプル・コード(つまり、何も有効ではありません)とサンプルgは適切にコードをコンパイルしてリンクするコマンドをコンパイル++です:あなたはステートメントを含める
$ cat t1338.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cuda_runtime.h>
#include <cufft.h>
int main() {
size_t work_size;
int fft_sz = 32; // Size of each FFT
int num_ffts = 1; // How many FFTs to do
cufftComplex *in_buf_h, *in_buf_d, *out_buf_d;
// Allocate buffers on host and device
in_buf_h = new cufftComplex[fft_sz*num_ffts];
cudaMalloc(&in_buf_d, fft_sz*num_ffts*sizeof(cufftComplex));
cudaMalloc(&out_buf_d, fft_sz*num_ffts*sizeof(cufftComplex));
cudaMemset(out_buf_d, 0, fft_sz*num_ffts*sizeof(cufftComplex));
// Fill input buffer with zeros and copy to device
memset(in_buf_h, 0, fft_sz*num_ffts*sizeof(cufftComplex));
cudaMemcpy(in_buf_d, in_buf_h, fft_sz*num_ffts*sizeof(cufftComplex), cudaMemcpyHostToDevice);
// Plan num_ffts of size fft_sz
cufftHandle plan;
cufftCreate(&plan);
cufftMakePlan1d(plan, fft_sz, CUFFT_C2C, num_ffts, &work_size);
// Execute the plan. We don't actually care about values.
cufftExecC2C(plan, in_buf_d, out_buf_d, CUFFT_FORWARD);
// Sync the device to flush the output
cudaDeviceSynchronize();
return 0;
}
$ g++ t1338.cpp -I/usr/local/cuda/include -L/usr/local/cuda/lib64 -lcudart -lcufft
$
は、おそらくとして、あるOKですが、私が言うのフォーマットを使用している「このファイルの標準パスで検索」と、私はあなたのコンパイルコマンドは間違いなく必要なリンク装置が欠落しているが
-I/usr/local/cuda/include
と標準パスへの追加を識別します。あなたはどこ-L
とライブラリ(パス)を見つけるために指定する必要があり、その後、含まれるように、特定のライブラリを示し、両方のCUDAランタイムライブラリである(-lcudart
)ともCUFFTライブラリ(-lcufft
):
-L/usr/local/cuda/lib64 -lcudart -lcufft
CUDAツールキットは、通常、サンプルコードでインストールされます。このサンプルコードでは、サンプルのMakefileを調べることができます。また、これらのプロジェクトをコンパイルして、一般的なコンパイルコマンドの使用法を確認することもできます。
私が言及したように、このソースコードは不完全です。それは何も役に立たない。適切なコンパイルの動作を示すだけです。特に、私はあなたの実際のコードに含めることをお勧めします適切なエラーチェックを省略しました。
あなたのインストールは、シンボリックリンクを作成したかどうかに応じて、に上記のパスを変更する必要があります。
-I/usr/local/cuda-9.0/include
と
-L/usr/local/cuda-9.0/lib64 -lcudart -lcufft
あなたはcudaランタイムAPIライブラリとcufftライブラリをリンクする必要があります。あなたが短い、完全なコードと正確なコンパイラ出力を与えるならば、おそらくあなたを助ける方が簡単でしょう。 –