使用 Clang 编译基于 OpenCV 的项目
Compiling OpenCV based project using Clang
我刚刚在我的 64 位 ubuntu 盒子上的 clang 3.4 上进行了全新安装,我正在尝试编译一个使用 OpenCV 的项目。Clang和OpenCV库都是使用apt-get从ubuntu存储库安装的。使用 GCC 构建工作正常。生成过程由 CMake 管理。
当我使用 Clang 运行构建时,出现以下错误:
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clReleaseMemObject@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clGetKernelWorkGroupInfo@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clFlush@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clReleaseKernel@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clReleaseCommandQueue@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clReleaseEvent@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clEnqueueWriteBuffer@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clEnqueueCopyBufferRect@OPENCL_1.1'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clCreateBuffer@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clFinish@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clBuildProgram@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clEnqueueFillBuffer@OPENCL_1.2'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clSetKernelArg@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clCreateProgramWithBinary@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clCreateContext@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clReleaseProgram@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clGetDeviceIDs@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clGetEventProfilingInfo@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clEnqueueUnmapMemObject@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clRetainCommandQueue@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clCreateProgramWithSource@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clCreateKernel@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clGetDeviceInfo@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clReleaseContext@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clRetainContext@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clCreateCommandQueue@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clEnqueueNDRangeKernel@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clWaitForEvents@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clEnqueueReadBuffer@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clEnqueueMapBuffer@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clCreateImage@OPENCL_1.2'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clEnqueueWriteBufferRect@OPENCL_1.1'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clEnqueueCopyBufferToImage@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clGetProgramBuildInfo@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clGetPlatformIDs@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clGetProgramInfo@OPENCL_1.0'
/usr/lib64/gcc/x86_64-linux-gnu/4.8/../../../../lib64/libopencv_ocl.so: undefined reference to `clEnqueueReadBufferRect@OPENCL_1.1'
它们似乎与OpenCL相关。如何修复这些链接器错误?
尝试手动编译它。有时,通过数据包管理器安装依赖项时会出现一些问题。CMake 是一个非常强大的工具。它对编译器、平台等执行检查。
安装 cmake(通过数据包管理器)并从存储库下载最后一个 OpenCV 源代码:
https://github.com/Itseez/opencv
并在外壳上键入用于制作蛋糕的标准命令:
$ cd opencv_path
$ mkdir build
$ cd build
$ cmake ..
$ make
执行蛋糕也可以输出一些重要信息,最好阅读它们:)
适用于opencv的CMake脚本还为您提供了配置CUDA和OpenCL的好方法!
相关文章:
- 为什么在Visual Studio的OpenCV项目中使用/MT时仍然需要dll?
- CMAKE-如何将塔库与OpenCV -C 项目联系起来
- 如何使用libsvm在OPENCV项目中生成的模型
- 使用CMake编译OpenCV项目时出错
- OpenCV 项目无法编译
- 在VisualStudio 2013[x64 machine]上调试openCV项目的设置
- 无法使用 CMake 生成 OpenCV 项目
- 如何以及在哪里为Visual C++ OpenCV项目添加调试符号
- OpenCV 项目在将直方图应用于黑色图像时崩溃
- 如何在编译OpenCV项目时禁用TBB
- opencv项目中的CMakeLists.txt出错
- cmake 在 OpenCV C++ 项目中不起作用
- 在Cygwin上使用CMake编译OpenCV项目,并为Windows安装OpenCV
- 无法从 IDE 运行 VS2010 opencv 项目
- 试图在Dev c++上编译OpenCV项目时出现错误
- 如何构建openCV项目到dll
- 在eclipse ubuntu上构建opencv项目失败
- 在没有OpenCV包管理器的Eclipse上创建Android OpenCV项目
- 无法使用cmake构建Opencv项目
- 将 OpenCV 项目升级到最新版本