gpt4 book ai didi

c++ - OpenCV:对 `cv::namedWindow(cv::String const&, int)' 的 undefined reference

转载 作者:太空宇宙 更新时间:2023-11-04 14:30:00 33 4
gpt4 key购买 nike

更新:代码在另一台计算机上编译成功。所以问题不在于代码本身,而在于我安装依赖项的方式。


如果我遗漏了任何必要的信息,请告诉我。完整代码可见here .

以下代码在使用 these instructions 从 SourceForge 全新安装 OpenCV 3.2.0 的 Ubuntu 14.04 上编译和运行得很好:

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv )
{
Mat image;
image = imread( argv[1], 1 );
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitkey(0);

return 0;
}

使用以下 CMakeLists.txt:

 cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

以下代码无法编译。

车道查找器.h

#ifndef Lane_Finder_h
#define Lane_Finder_h

#include <stdio.h>
#include <ros/ros.h>
#include <sensor_msgs/Image.h>
#include <sensor_msgs/image_encodings.h>
#include <cv_bridge/cv_bridge.h>
#include <opencv2/opencv.hpp>

class LaneFinder
{ *snip* }

#endif

车道查找器.cpp:

#include "lane_finder.h"

sensor_msgs::CompressedImage LaneFinder::findLanes(const sensor_msgs::Image& msg) {
*snip*
frame = in_msg->image;

cv::namedWindow("Display Image", cv::WINDOW_AUTOSIZE );
cv::imshow("Display Image", frame);
*snip*
}

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.3)
project(lane_finding)
find_package(catkin REQUIRED COMPONENTS roscpp cv_bridge sensor_msgs)
find_package(OpenCV REQUIRED)
catkin_package()
include_directories(include ${catkin_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})
add_executable(lane_finder src/lane_finder.cpp src/main.cpp)
target_link_libraries(lane_finder
${catkin_LIBRARIES}
${OpenCV_LIBS}
)

编译错误:

CMakeFiles/lane_finder.dir/src/lane_finder.cpp.o: In function `LaneFinder::findLanes(sensor_msgs::Image_<std::allocator<void> > const&)':
lane_finder.cpp:(.text+0x36c): undefined reference to `cv::namedWindow(cv::String const&, int)'
lane_finder.cpp:(.text+0x3c1): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
CMakeFiles/lane_finder.dir/src/lane_finder.cpp.o: In function `cv::String::String(char const*)':
lane_finder.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x4f): undefined reference to `cv::String::allocate(unsigned long)'
CMakeFiles/lane_finder.dir/src/lane_finder.cpp.o: In function `cv::String::~String()':
lane_finder.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): undefined reference to `cv::String::deallocate()'
CMakeFiles/lane_finder.dir/src/lane_finder.cpp.o: In function `cv::String::operator=(cv::String const&)':
lane_finder.cpp:(.text._ZN2cv6StringaSERKS0_[_ZN2cv6StringaSERKS0_]+0x28): undefined reference to `cv::String::deallocate()'
collect2: error: ld returned 1 exit status

我这辈子都弄不明白为什么一个运行完美而另一个运行失败。我怀疑我链接不正确,因为这是我第一次尝试使用我自己编写的头文件进行编译。如果您认为我为了保持这篇文章的可读性而遗漏了一些重要的东西,我在这篇文章的开头包含了一个指向包含完整代码的 github 存储库的链接。

非常感谢大家。

最佳答案

你应该添加这个选项:

pkg-config opencv --cflags --libs

关于c++ - OpenCV:对 `cv::namedWindow(cv::String const&, int)' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41912856/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com