OpenCL を使用するための C++ の再学習。デバイスの統計情報を取得するための一連のボイラー プレート コードを含む CheckDevice というヘルパー クラスを作成しました。
CheckDevice.h
class Utils
{
public:
Utils(){};
~Utils(){};
template<class T>
static bool IsNull(T Object, char* name);
private:
};
CheckDevice.cpp
cl_command_queue Utils::CreateCommandQueue(cl_context context, cl_device_id *device)
{
cl_int err;
cl_device_id *devices;
cl_command_queue queue = NULL;
size_t deviceBufferSize = -1;
cl_kernel kernel = 0;
Utils::IsNull<cl_command_queue>(queue, "Utils::CreateCommandQueue::queue");
return queue;
}
main.cpp
void main()
{
cl_kernel kernel = 0;
Utils::IsNull<cl_kernel>(kernel, "clCreateKernel");
}
問題は、関数 Utils::IsNull を CheckDevice.cpp 内から呼び出すときは正常に動作しますが、main.cpp から呼び出すときは、Visual Studios 2012 で次のようになることです。
エラー LNK2019: 未解決の外部シンボル "public: static bool __cdecl Utils::IsNull(struct _cl_kernel *,char *)" (??$IsNull@PAU_cl_kernel@@@Utils@@SA_NPAU_cl_kernel@@PAD@Z) 関数 _main 1 で参照>C:\Users\Suri\Documents\Visual Studio 2012\Projects\HelloWorld\Debug\HelloWorld.exe: 致命的なエラー LNK1120: 1 つの未解決の外部
どんな助けでも感謝します