CMake-OpenCV-找不到-lDisplayImage 我试图用OpenCV构建一个C++项目,使用 Cmake 。但有一个错误我无法解决。我找了很多,但什么也没找到

CMake-OpenCV-找不到-lDisplayImage 我试图用OpenCV构建一个C++项目,使用 Cmake 。但有一个错误我无法解决。我找了很多,但什么也没找到,c++,opencv,cmake,C++,Opencv,Cmake,注意: 我是OpenCV的初学者。所以我甚至不知道为什么需要这个图书馆。只是对一个网站做同样的解释 错误为/usr/bin/ld:找不到-lDisplayImage 我的代码: #include <opencv2/opencv.hpp> using namespace cv; int main() { // read image Mat img = imread("foo.jpg", CV_LOAD_IMAGE_UNCHANGED); // show i

注意:
我是OpenCV的初学者。所以我甚至不知道为什么需要这个图书馆。只是对一个网站做同样的解释

错误为
/usr/bin/ld:找不到-lDisplayImage

我的
代码

#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    // read image
    Mat img = imread("foo.jpg", CV_LOAD_IMAGE_UNCHANGED);

    // show it in the window
    imshow("Window Name",img);

    waitKey();
}
我的编译输出:

[ 50%] Linking CXX executable image_processing
/usr/bin/ld: cannot find -lDisplayImage
collect2: error: ld returned 1 exit status
CMakeFiles/image_processing.dir/build.make:137: recipe for target 'image_processing' failed
make[3]: *** [image_processing] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/image_processing.dir/all' failed
make[2]: *** [CMakeFiles/image_processing.dir/all] Error 2
CMakeFiles/Makefile2:79: recipe for target 'CMakeFiles/image_processing.dir/rule' failed
make[1]: *** [CMakeFiles/image_processing.dir/rule] Error 2
Makefile:118: recipe for target 'image_processing' failed
make: *** [image_processing] Error 2
ld-ldisplayimage--verbose命令的输出:

attempt to open //usr/local/lib/x86_64-linux-gnu/libdisplayimage.so failed
attempt to open //usr/local/lib/x86_64-linux-gnu/libdisplayimage.a failed
attempt to open //lib/x86_64-linux-gnu/libdisplayimage.so failed
attempt to open //lib/x86_64-linux-gnu/libdisplayimage.a failed
attempt to open //usr/lib/x86_64-linux-gnu/libdisplayimage.so failed
attempt to open //usr/lib/x86_64-linux-gnu/libdisplayimage.a failed
attempt to open //usr/local/lib64/libdisplayimage.so failed
attempt to open //usr/local/lib64/libdisplayimage.a failed
attempt to open //lib64/libdisplayimage.so failed
attempt to open //lib64/libdisplayimage.a failed
attempt to open //usr/lib64/libdisplayimage.so failed
attempt to open //usr/lib64/libdisplayimage.a failed
attempt to open //usr/local/lib/libdisplayimage.so failed
attempt to open //usr/local/lib/libdisplayimage.a failed
attempt to open //lib/libdisplayimage.so failed
attempt to open //lib/libdisplayimage.a failed
attempt to open //usr/lib/libdisplayimage.so failed
attempt to open //usr/lib/libdisplayimage.a failed
attempt to open //usr/x86_64-linux-gnu/lib64/libdisplayimage.so failed
attempt to open //usr/x86_64-linux-gnu/lib64/libdisplayimage.a failed
attempt to open //usr/x86_64-linux-gnu/lib/libdisplayimage.so failed
attempt to open //usr/x86_64-linux-gnu/lib/libdisplayimage.a failed
ld: cannot find -ldisplayimage
我试图找到那个图书馆,但找不到。我检查了我所有的
lib
文件夹

我的opencv安装在
/opt/opencv/
上,构建在
/opt/opencv/release/


谢谢你的帮助。我不知道如何解决这个问题。

当你在不理解示例的情况下复制和粘贴示例时,就会出现这种情况。问题出在CMakeLists.txt中

你有

cmake_minimum_required(VERSION 3.8)
project(image_processing)

find_package( OpenCV REQUIRED )

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
add_executable(image_processing ${SOURCE_FILES})
target_link_libraries( image_processing DisplayImage ${OpenCV_LIBS} )
我将在这里一行一行地走。首先,它检查您是否有一个最小的cmake版本(以确保之后的一些函数是有效的),然后是项目的名称。显然,它可以是您想要的任何名称。然后找到OpenCV库,它设置了几个变量(包括、libs等)。然后设置c++11标准和源文件,在本例中,此可执行文件的值仅为1(您可以根据需要放置任意数量的文件,如果需要,与.h相同)

最后,重要的部分是,添加您传递2个参数的可执行文件,可执行文件的名称(可以是任何名称)和源文件。。。您甚至可以手动写入源文件,而不是先将其设置为变量。然后你说哪些库将链接到你的可执行文件。。。这就是你的错误所在!!您必须将之前声明的可执行文件的相同名称作为第一个参数,后跟所使用的库。当您执行
find_-package(需要OpenCV)
时,它会在
$(OpenCV_-LIBS)
变量中设置库名称。如果您需要另一个库,您可以手动输入名称,并在编译时将其链接。在本例中,您的名称为DisplayImage,它认为这是一个库名称并尝试链接它,这意味着编译时
-lDisplayImage

这意味着您删除了它,它应该编译:)

另外,在找到OpenCV包之后,我建议您这样做

include_directories( ${OpenCV_INCLUDE_DIRS} )
这将确保将include文件夹添加到编译中。在gcc中等效于-Ifolder/path选项。如果必须包含来自不同库项目的更多文件夹,则可以使用此命令


我希望这对您有所帮助。

您尝试链接失败的
DisplayImage
库是什么,它与OpenCV有什么关系?我已经添加了我的代码。您仍然没有回答上述问题,我仍然没有看到与OpenCV相关的任何错误。你试图链接到一些你没有解释过的晦涩难懂的库,链接器找不到这些库,显然你的代码也没有使用这些库。我只是在做从网站安装指南的相同说明。在没有DisplayImage的情况下,编译器会给出一个错误(我不在linux atm上,无法编写准确的错误)。我是openCV的初学者。所以我也不知道这个库是什么。从
CMakeLists.txt
中删除
DisplayImage
。看起来它只是一个从下面的OpenCV复制粘贴的遗留工件。。谢谢你这么好的评论。@Zaphiel我一直认为给出解决方案而不解释会在将来导致同样的错误,但如果你理解了问题,它就不会再发生:)
target_link_libraries( image_processing  ${OpenCV_LIBS} )
include_directories( ${OpenCV_INCLUDE_DIRS} )