0

私は何時間も問題を解決しようとしましたが、有用なヒントは見つかりませんでした。うまくいけば、皆さんが私を助けてくれます:

いくつかの有用なデータ:
OS: Windows 8 Basic 64bit
ライブラリ: Intel OpenCL SDK
コンパイラ: MinGW(-gcc) (最新バージョン)
IDE: Code::Blocks (最新バージョン)

最小限の動作しないコード:

#include <stdlib.h>
#include <CL/cl.h>

int main(void)
{
  cl_uint available;
  cl_platform_id* platforms = (cl_platform_id*)malloc(sizeof(cl_platform_id));
  cl_int result = clGetPlatformIDs(1, platforms, &available);
  free(platforms);
  if(result == CL_SUCCESS)      
    return 0;      
  return -1;
}

Code::Blocks Global Compiler Settings:
Linker Settings: Intel の OpenCL.lib へのパスを追加 ([...]\Intel\OpenCL SDK\3.0\lib\x64\OpenCL.lib) (その他のオプションとして -lOpenCL も試しました)
コンパイラの検索ディレクトリ: Intels OpenCL-SDK インクルード ディレクトリへのパス ([...]\Intel\OpenCL SDK\3.0\include)
リンカの検索ディレクトリ: Intels OpenCL-Lib ディレクトリへのパス ([...]\ Intel\OpenCL SDK\3.0\lib\x64)

ビルドログ:

mingw32-g++.exe -L"[...]\Intel\OpenCL SDK\3.0\lib\x64"  -o bin\Release\openCLTest.exe     obj\Release\main.o   -s "[...]\Intel\OpenCL SDK\3.0\lib\x64\OpenCL.lib" 
obj\Release\main.o:main.c:(.text.startup+0x39): undefined reference to `clGetPlatformIDs@12'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
1 errors, 0 warnings (0 minutes, 0 seconds)

彼が適切にリンクしない理由がわかりません。テキストの [...] は、パスを短くするために私が変更したもので、通常は「C:\Program Files (x86)...」になります。

うまくいけば、あなたたちは私を助けることができます! 本当にイライラします!:(
もっと情報が必要ですか?

編集:
わかりました...さらに1時間、私は自分の問題を解決しました。
このヒントが他の人に役立つことを願っ
ています: x86 ライブラリに対して追加でリンクする必要がありました (一部の機能は X64 に実装されていないようです)。
知っておくと便利 -.-'''

4

2 に答える 2

0

外部ソースによると、この問題に対する私自身の啓蒙の道に沿って偶然見つけたもので、mingw-w64 リンカーに実際に何か問題があることがわかりました。mingw-w64 の ld.exe は、標準の libopencl.a とのリンクを望んでいません。これがインテル SDK 固有のものであるかどうかはわかりませんが、ソリューションへのリンクは次のとおりです。

http://sourceforge.net/p/mingw-w64/support-requests/46/

デフォルトの libopencl.a ではなく、提供されている libopencl.a にリンクするだけです。

リンカーが問題を引き起こす理由はまだ正確にはわかりませんが、解決策が(何らかの方法で)問題を解決することを確認しました。

于 2013-07-25T21:47:40.353 に答える