首页 文章

libopencv_core.so.2.4:添加符号时出错:命令行中缺少DSO

提问于
浏览
1

我已经将OpenCV 3.3.0安装到Ubuntu 16.04 . 只想编译这段代码 .

#include <iostream>
using namespace std;
#include "opencv2/opencv.hpp"
#include "opencv2/gpu/gpu.hpp"
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <cmath>

using namespace cv;

int main(int argc, char* argv[])
{
    try
    {
        int kernel_size = 3;
        cv::Mat src_host = cv::imread("crack2.jpg");
        cv::Mat gray_img, avg, kernel;
        cv::gpu::GpuMat dst, src;
        src.upload(src_host);

        cv::gpu::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY);

        cv::Mat result_host;
        dst.download(result_host);

        std::cout<< "Done!!!" <<std::endl;

    }catch(const cv::Exception& ex)
    {
        std::cout<<"Error: " << ex.what() << std::endl;
    }
    return 0;
}

g -o main gpu_thresh.cpp'pkg-config opencv --cflags --libs'-lopencv_gpu -lopencv_core

g -L / usr / local / lib -o main gpu_thresh.cpp'pkg-config opencv --cflags --libs'-lopencv_gpu -lopencv_core

我尝试用这些方法编译它,但仍然给出相同的警告和错误 .

/ usr / bin / ld:警告:libopencv_core.so.2.4,/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_gpu所需 . 所以,可能与libopencv_core.so.3.3 / usr / bin / ld:/tmp/ccdhLGL0.o冲突:对符号'_ZN2cv3gpu6GpuMat7releaseEv'的未定义引用//usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4:错误添加符号:命令行collect2中缺少DSO:错误:ld返回1退出状态

我该怎么办?

1 回答

  • 1

    在OpenCV 3.3中没有 opencv2/gpu/gpu.hpp . 如果您的代码编译,则表示您的计算机上同时包含OpenCV 2.4和3.3 .

    在OpenCV 3.3中,包括:

    #include <opencv2/core/cuda.hpp>
    

    然后使用

    cv::cuda::GpuMat img;
    

    查看详情here .

    Edit: 我刚刚注意到你的编译方法 . 使用 pkg-config opencv --cflags --libs 时,您不再需要手动添加libopencv文件 .

    做: g++ -o main gpu_thresh.cpp 'pkg-config opencv --cflags --libs'

相关问题