【问题标题】:libopencv_core.so.2.4: error adding symbols: DSO missing from command linelibopencv_core.so.2.4:添加符号时出错:命令行中缺少 DSO
【发布时间】:2018-02-12 00:33:25
【问题描述】:

我已将 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.so, 可能与 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 退出状态

我该怎么办?

【问题讨论】:

  • 您是如何安装 OpenCV 3.3 的?您的机器上似乎有两个版本的 OpenCV。
  • 从资源中,我在“make -j 4”中停止了第一次安装,因为我忘记了添加 WITH_CUDA=ON 标志,我之前没有在 ubuntu 中使用 c++ 和 opencv
  • 另外,如果我运行这个 pkg-config --modversion opencv 它只显示 1 个结果
  • 转到 chat.stackoverflow.com 并加入群组:OpenCV Related。我在那里在线。

标签: c++ linux opencv gcc g++


【解决方案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

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

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

【讨论】:

  • gpu_thresh.cpp:79:7: 错误:'cv::gpu' 尚未声明 cv::gpu::GpuMat dst, src;
  • 对 `cv::gpu::GpuMat::upload(cv::Mat const&)' 的未定义引用和类似这样的一堆错误
猜你喜欢
  • 1970-01-01
  • 2015-09-18
  • 2013-11-22
  • 2015-11-02
  • 1970-01-01
  • 2017-05-13
  • 2020-01-12
  • 1970-01-01
  • 2021-10-07
相关资源
最近更新 更多