2017-01-28 9 views
0

更新:コードは別のコンピュータで正常にコンパイルされます。だから、問題はコードそのものではなく、依存関係がインストールされている方法である。OpenCV: `cv :: namedWindow(cv :: String const&、int) 'への未定義の参照


必要な情報が省略されている場合は、お知らせください。完全なコードはhereです。

次のコードはコンパイルしたばかりのSourceForgeからインストールOpenCVの3.2.0がthese instructions用いてUbuntu 14.04で完全に正常に動作:以下

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

:CMakeLists.txt次使用

#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; 
} 

をコードがコンパイルに失敗します。

lane_finder.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 

lane_finder.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リポジトリへのリンクを含んでいます。

ありがとうございました。

+0

何かがビルドプロセスに間違っているようには思えないので、さて、あなたは、リンカエラーを取得しているが私はOpenCVについて何も知らないし、何をしているのか明らかに間違っていることは何も見ない。あなたが何かを得るまであなたのコードとライブラリを分けることができるかどうかを見てください。問題がどこにあるかを見つけるのに役立つかもしれません。 –

答えて

-1

cv_bridgeはOpenCV 2.4に依存します。指定するCMakeLists.txtを変更します。

find_package(OpenCV 2 REQUIRED) 
0

は、このオプションを追加する必要があります

pkg-config opencv --cflags --libs

関連する問題