2014年1月2日木曜日

Linux Mint 16 で libOpenCL.so が使い物にならないとき

/usr/bin/clang++   -std=c++11  -O3 -DNDEBUG   CMakeFiles/finger-position.dir/finger-position.cxx.o  -o finger-position  -rdynamic -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lOpenCL

とかするわけです。要点は Linux Mint 16 環境に clang++-3.2-lOpenCL を OpenCV まわりのついでにするとコケる事があるってこと。

/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../libopencv_ocl.so: `clReleaseMemObject@OPENCL_1.0' に対する定義されていない参照です
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../libopencv_ocl.so: `clGetKernelWorkGroupInfo@OPENCL_1.0' に対する定義されていない参照です
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../libopencv_ocl.so: `clFlush@OPENCL_1.0' に対する定義されていない参照です
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../libopencv_ocl.so: `clReleaseKernel@OPENCL_1.0' に対する定義されていない参照です
(以下略いっぱい)

どうやらシステムに導入していたnvidia版のlibOpenCL.so(nvidia-update-319)がどうも使い物にならないみたい。

今はOpenCLはOpenCVのついで程度に使ってビルドが通れば良い程度なので、詳細は調べていませんが、nvidia版じゃなくてocl-icd-opencl-devパッケージに入れ替えるとclang++-3.2で-OpenCLしてもビルドできるみたい。

ちなみに、g++-4.8.1だとこの問題、nvidia版でも発生しないんだよね。めんどくさそうだからとりあえずはocl-icd-opencl-devを導入して、なんで問題が起きたのか考えるのはまたの機会に。

0 件のコメント:

コメントを投稿