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} )