【记录一个问题】opencv + cuda编译release版本后,链接出现奇怪的符号

解决OpenCV与OpenCL链接错误
本文详细记录了解决在使用OpenCV时遇到的与OpenCL相关链接错误的过程。通过重新编译OpenCV并禁用所有WITH_OPENCL选项,成功解决了由多个未定义引用导致的链接失败问题。

链接出现以下信息:

 1 /home/admin/opencv/20190610_cuda_release/lib64/libopencv_core.a(ocl.cpp.o): In function `cv::ocl::Context::Impl::svmInit()':
 2 ocl.cpp:(.text._ZN2cv3ocl7Context4Impl7svmInitEv[_ZN2cv3ocl7Context4Impl7svmInitEv]+0x133): undefined reference to `clSVMAlloc_pfn'
 3 ocl.cpp:(.text._ZN2cv3ocl7Context4Impl7svmInitEv[_ZN2cv3ocl7Context4Impl7svmInitEv]+0x16e): undefined reference to `clEnqueueSVMMap_pfn'
 4 ocl.cpp:(.text._ZN2cv3ocl7Context4Impl7svmInitEv[_ZN2cv3ocl7Context4Impl7svmInitEv]+0x1aa): undefined reference to `clEnqueueSVMUnmap_pfn'
 5 ocl.cpp:(.text._ZN2cv3ocl7Context4Impl7svmInitEv[_ZN2cv3ocl7Context4Impl7svmInitEv]+0x1dd): undefined reference to `clSVMFree_pfn'
 6 ocl.cpp:(.text._ZN2cv3ocl7Context4Impl7svmInitEv[_ZN2cv3ocl7Context4Impl7svmInitEv]+0x204): undefined reference to `clSetKernelArgSVMPointer_pfn'
 7 ocl.cpp:(.text._ZN2cv3ocl7Context4Impl7svmInitEv[_ZN2cv3ocl7Context4Impl7svmInitEv]+0x215): undefined reference to `clEnqueueSVMMemcpy_pfn'
 8 ocl.cpp:(.text._ZN2cv3ocl7Context4Impl7svmInitEv[_ZN2cv3ocl7Context4Impl7svmInitEv]+0x226): undefined reference to `clEnqueueSVMMemFill_pfn'
 9 ocl.cpp:(.text._ZN2cv3ocl7Context4Impl7svmInitEv[_ZN2cv3ocl7Context4Impl7svmInitEv]+0x237): undefined reference to `clEnqueueSVMMap_pfn'
10 ocl.cpp:(.text._ZN2cv3ocl7Context4Impl7svmInitEv[_ZN2cv3ocl7Context4Impl7svmInitEv]+0x4b7): undefined reference to `clSVMFree_pfn'
11 collect2: error: ld returned 1 exit status
12 make[2]: *** [test_kcf] Error 1
13 make[1]: *** [CMakeFiles/test_kcf.dir/all] Error 2
14 make: *** [all] Error 2

_pfn的后缀,其实是define出来的应该不能算是一个符号!
说明编译的时候把宏当成了一个符号……
未解决!

=========================

重新编译opencv, 将WITH_OPENCL的所有选项关闭。
重新编译链接程序,解决!

转载于:https://www.cnblogs.com/ahfuzhang/p/10998319.html

在Linux系统下使用Python语言编译集成CUDAOpenCV项目时,可能会遇到多种导致编译失败的问题。以下是一些常见的问题及其解决方法,这些方法结合了实际操作经验和相关资料中的建议。 ### 编译环境准备 确保系统已经安装了必要的依赖项,包括但不限于CUDA Toolkit、cuDNN、CMake以及Python相关的开发库。可以通过以下命令安装一些基础依赖: ```bash sudo apt-get update sudo apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install -y python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev sudo apt-get install -y libdc1394-22-dev libv4l-dev v4l-utils sudo apt-get install -y libopenblas-dev liblapack-dev libeigen3-dev ``` ### CMake配置问题 在配置CMake时,需要确保所有与CUDA相关的选项都正确设置。例如,`WITH_CUDA`和`WITH_CUDNN`应设为`ON`,并且需要指定正确的CUDA架构版本(`CUDA_ARCH_BIN`),这取决于你的GPU型号。此外,`OPENCV_EXTRA_MODULES_PATH`应该指向`opencv_contrib`模块的路径,以启用额外的功能模块[^2]。 ### 编译过程中的常见错误及解决方法 #### 错误:找不到`cudev`库 如果在编译过程中遇到找不到`cudev`库的错误,这通常是因为OpenCVCUDA模块没有正确配置或者CUDA工具包未被正确识别。确保CUDA Toolkit已正确安装,并且CMake能够找到它。可以通过设置`CUDA_CUDA_LIBRARY`变量来指定CUDA库的位置[^1]。 #### 错误:CMake生成失败 如果CMake生成过程中出现错误,尤其是与权限有关的错误,尝试使用管理员权限运行CMake或构建工具。对于Visual Studio项目,确保使用管理员权限打开Visual Studio并构建项目[^2]。 ### 安装后的问题 #### 动态链接库找不到 安装完成后,如果运行程序时提示找不到动态链接库,可能需要更新系统的动态链接器缓存。可以通过编辑`/etc/ld.so.conf`文件,添加编译好的OpenCV库路径,然后执行`sudo ldconfig`命令更新缓存[^4]。 ### 示例CMake配置命令 以下是一个用于配置OpenCV项目的CMake命令示例,该命令启用了CUDA支持和其他常用选项: ```bash cmake \ -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=/path/to/opencv_contrib/modules \ -D CUDA_CUDA_LIBRARY=/usr/local/cuda/lib64/stubs/libcuda.so \ -D CUDA_ARCH_BIN=7.5 \ -D WITH_CUDA=ON \ -D WITH_CUDNN=ON \ -D OPENCV_DNN_CUDA=ON \ -D BUILD_opencv_python3=ON \ -D BUILD_TESTS=OFF \ -D BUILD_PERF_TESTS=OFF .. ``` 请根据自己的硬件和软件环境调整上述命令中的参数。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值