c++ - 将 libopencv_gpu.so 与 OpenCV 链接时 undefined reference

标签 c++ opencv

尝试编译单个 .cpp 文件时出现错误

主要.cpp:

#include "opencv2/core/core_c.h"
#include "opencv2/core/core.hpp"
#include "opencv2/flann/miniflann.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/video/video.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/ml/ml.hpp"
#include "opencv2/highgui/highgui_c.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/contrib/contrib.hpp"
#include <opencv2/gpu/gpu.hpp>
#include <iostream>

int main(int argc, char* argv[])
{
    cv::VideoCapture capture = cv::VideoCapture(argv[1]);
    cv::gpu::GpuMat gpu_frame,gpu_frame_binary;
    cv::Mat frame;
    int threshold_value = 80;
    int threshold_type = 0;
  while (1)
     {
        capture >> frame;
        gpu_frame.upload(frame);
        if (!frame.data)             
            break;

        cv::gpu::threshold(gpu_frame, gpu_frame_binary, threshold_value, 255, threshold_type);
      }
   return 0;
 }

使用这些选项构建的 OpenCV:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_V4L=ON -D WITH_GSTREAMER=ON -D WITH_OPENEXR=ON -D WITH_UNICAP=ON -D BUILD_PYTHON_SUPPORT=ON -D INSTALL_C_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D ENABLE_SSE2=ON -D WITH_CUDA=ON ..

用于编译的命令:

g++ -ggdb `pkg-config --cflags opencv` -o main main.cpp `pkg-config --libs opencv` -lopencv_gpu 

我得到的错误:

/usr/local/lib/libopencv_gpu.so: undefined reference to `cv::gpu::convertTo(cv::gpu::GpuMat const&, cv::gpu::GpuMat&, double, double, CUstream_st*)'
/usr/local/lib/libopencv_gpu.so: undefined reference to `cv::gpu::setTo(cv::gpu::GpuMat&, cv::Scalar_<double>, cv::gpu::GpuMat const&, CUstream_st*)'
/usr/local/lib/libopencv_gpu.so: undefined reference to `cv::gpu::setTo(cv::gpu::GpuMat&, cv::Scalar_<double>, CUstream_st*)'
collect2: error: ld returned 1 exit status

当我尝试不使用 -lopencv_gpu 选项进行编译时,出现如下错误:

main.cpp:61: undefined reference to `cv::gpu::threshold(cv::gpu::GpuMat const&, cv::gpu::GpuMat&, double, double, int, cv::gpu::Stream&)'

任何想法可能是错误的?

P.S 可能需要注意的是,我首先在没有 cuda 的情况下构建了 opencv,然后决定我想尝试 cuda 并在打开 cuda 选项的情况下构建它,然后执行 sudo make install。 我认为它会覆盖以前安装的内容,但可能那里出了问题?

在 Fedora 20 上运行,带有 Nvidia 卡。

最佳答案

我遇到了同样的问题。
为了解决这个问题,我刚刚删除了 /usr/local/lib/中的 libopencv_gpu.so.2.4libopencv_gpu.so.2.4.10

关于c++ - 将 libopencv_gpu.so 与 OpenCV 链接时 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25312143/

相关文章:

c++ - windows下Qt中配置OpenCv

c - 如何从图像的直方图中过滤感兴趣的对象?

python - 加快选择 3 个节点的集合,这些节点形成具有给定最小和最大边长的三角形

c++ - 为什么 Boost 多精度不能与 Boost 有理数库一起使用?

c++ - 关于循环速度的问题

c++ - Project70.exe : 0xC0000005: Access violation writing location 0xDDDDDDDD 中的 0x0F4D514F (vcruntime140d.dll) 抛出异常

C++ stable_partition 编译器错误

c++ - 计算两幅图像的均方误差

java - opencv Mat 对象

c++ - 指定boost::multi_array中所有数组的长度