は、このサンプル・コードをコンパイルしようとして:https://github.com/boostorg/compute/blob/master/README.mdブーストコンピューティング(OpenCLのラッパー)、初期セットアップの問題(QT、G ++)
私は
を使用してブーストライブラリをコンパイルmingw530を使用してQTクリエーター5.7をインストール
bootstrap.bat gcc
b2 install --prefix="C:\Boostbuild" --toolset=gcc
bjam --build-dir=c:/Dev/Boost/Boost_lib toolset=gcc stage
私は、私もダウンロードしたOpenCLの1.1、1.2、および2.1 cl.hpp AMD SDK 3.0、2.9.1、および2.9
をインストールし、それを含めることを試みました。
コンパイルが開始されますが、私は、エラー
のスルーを取得するC:のDev \ブースト\コンピュート・マスター\は\ブーストを含める\ \コンピュート\ device.hpp:80:エラー:clRetainDevice `への未定義参照@ 4'
C:プロジェクト\ \ Users \ユーザーユーザー\ドキュメント\ビルドコンソールテストDesktop_Qt_5_7_0_MinGW_32bit-デバッグ\デバッグ\のmain.o:-1:機能で `ZN5boost7compute6deviceaSERKS1_ ':
を私はシンプルを試してみましたqtコンソールアプリ、ブースト計算で提供されるコードを使用
:これは、QTに固有ではない、私はまた、main.cppに中含めるのそれぞれに-Iをやっ
g++ -I/path/to/compute/include sort.cpp -lOpenCL
を使用して、これをコンパイルしようとしました(下記参照)
理想的には、私は」 d。インクルードとすべて(および関連するamd sdkおよび/またはopenclのバージョン)と必要なインクルードライブラリを使って、そのページで与えられたサンプルをコンパイルする方法を知りたい。
マイqtのプロジェクトファイルライブラリ
INCLUDEPATH += C:\Dev\Boost\compute-master\include
INCLUDEPATH += C:/Users/User/Downloads/dev/boost_1_61_0
INCLUDEPATH += "C:\Program Files (x86)\AMD APP SDK\2.9-1\include"
私のmain.cppに
#include <iostream>
#include <vector>
#include <algorithm>
#include <boost/compute.hpp>
//#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
//#undef CL_VERSION_1_2
//#include <C:\Dev\OpenCL\2.1\cl.hpp>
namespace compute = boost::compute;
int main()
{
// get the default compute device
compute::device gpu = compute::system::default_device();
// create a compute context and command queue
compute::context ctx(gpu);
compute::command_queue queue(ctx, gpu);
// generate random numbers on the host
std::vector<float> host_vector(1000000);
std::generate(host_vector.begin(), host_vector.end(), rand);
// create vector on the device
compute::vector<float> device_vector(1000000, ctx);
// copy data to the device
compute::copy(
host_vector.begin(), host_vector.end(), device_vector.begin(), queue
);
// sort data on the device
compute::sort(
device_vector.begin(), device_vector.end(), queue
);
// copy data back to the host
compute::copy(
device_vector.begin(), device_vector.end(), host_vector.begin(), queue
);
return 0;
}
私は含まcl.hppをコメント解除した場合、私はさらに
C:/Dev/Boost/compute-master/include/boost/compute/allocator/buffer_allocator.hpp:91: undefined reference to `[email protected]'
に変更する必要があります。OPENCL_ROOT = "C:¥Program Files(x86)¥AMD APP SDK¥2.9-1"; LIBS + = -LOpenCL; #cl.hpp C:\ Dev \ Boost \ compute-master \ include \ boost \ compute \ device.hpp:91:エラー:未定義のclReleaseDevice @ 4への参照。 clと。私は以下を取得します:C:/Dev/Boost/compute-master/include/boost/compute/allocator/buffer_allocator.hpp:91: 'clReleaseMemObject @ 4 'への未定義の参照 – thistleknot
大丈夫です。私は余分なINCLUDEPATHを2.9-1に取り除き、LIBS + = -lOpenCLに戻し、cl.hppへの参照を削除しました(これはsdkに含まれており、openclヘッダをダウンロードする必要はありません)。ありがとうございました! – thistleknot
将来参照するために、 '-L'はライブラリパスを追加するために使われ、' -l'はライブラリを追加するために使われます。そのため、 'LIBS + = -LOpenCL'を' LIBS + = -lOpenCL'に変更することができました。 – kenba