CプロジェクトにいくつかのCUDAコードを含めようとしています。これを行うために、CUDAソース(.cuファイル)を静的ライブラリ(.lib、Windowsで開発中)にコンパイルしています。次に、この静的ライブラリをCプロジェクトにリンクしたいと思います。しかし、私のリンカはこのステップについて不平を言っています、そしてそれはC /C++リンケージの問題のためだと思います。私が得ている特定のエラーは次のようになります。
Undefined symbol '_cudaMallocHost@8' referenced in "cufft object file.lib".
私はCUDA5.0を使用しており、Visual Studio 10で作業して、Windows7マシンでCUDAソースを作成およびコンパイルしています。
まず、静的ライブラリ( "cufft object file.lib")にコンパイルする.cuソースファイルがあります。全部をで包みましたextern C { }
。これは次のようになります。
extern "C" {
#include <cuda.h>
#include <cufft.h>
int myCUDAfunction()
{
//Some CUDA code
}
}
これに合わせて、.cuソース( "myCUDAheader.h")で定義された関数のリストを含むヘッダーファイルを作成しました。このファイルの内容は、一連の関数プロトタイプにすぎません。
int myCUDAfunction();
等
最後に、Cプロジェクトに静的ライブラリを追加し、ヘッダーファイルをインクルードします。
CUDAソース.cuファイルで関数をで宣言し始める前にextern "C"
、リンカーはそれらの関数のシンボルが欠落していると不平を言いました。これらは現在Cリンケージに正しくコンパイルされている必要がありますが、実際のCUDA関数(などcudaMalloc
)はまだC++リンケージを持っているようです。これを回避するにはどうすればよいですか?