2017-03-12 5 views
1

すべて!ROSキネティックからopencv3リンク

私はCLionプロジェクトでOpenCVライブラリを使用しようとしていますが、これは成功しません。私はopencv 3.2.0をROS kineticと同時にインストールしています(私は/opt/ros/kinetic/include/opencv-3.2.0ディレクトリにありますが、pythonでcv2をインポートできます)。次の簡単なコードで

cmake_minimum_required(VERSION 3.6) 
project(visual_slam) 

set(CMAKE_CXX_STANDARD 11) 
set(SOURCE_FILES main.cpp) 
set(OpenCV_DIR /opt/ros/kinetic/include/opencv-3.2.0) 
include_directories(${OpenCV_DIR}) 
add_executable(visual_slam ${SOURCE_FILES}) 

::私は、このようなCMakeLists.txtを使用する場合でも、

#include <iostream> 
    #include <opencv2/opencv.hpp> 

    using namespace cv; 

    int main() 
    { 
     return 0; 
    } 

私は次のエラーを取得:

CMakeFiles/visual_slam.dir/main.cpp.o: In function cv::String::~String()': /opt/ros/kinetic/include/opencv-3.2.0/opencv2/core/cvstd.hpp:664: undefined reference to cv::String::deallocate()' CMakeFiles/visual_slam.dir/main.cpp.o: In function cv::String::operator=(cv::String const&)': /opt/ros/kinetic/include/opencv-3.2.0/opencv2/core/cvstd.hpp:672: undefined reference to cv::String::deallocate()'

このようなエラーがOpenCV linking problems with ROSでも議論されました、完全にアンインストールしてからOpenCVを再インストールする必要が本当にありますか?それ以上のクイックソリューションはありますか?

2番目の質問は、正しくROSからCMakeLists.txtにOpenCVを追加する方法ですか?現在のCMakeList(上の図)は、柔軟性がないように見えます。私はすでに

find_package(OpenCV 3 REQUIRED) 
target_link_libraries(visual_slam ${OpenCV_LIBRARIES}) 

を追加しようとしましたが、エラーがcmakeのは

By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "OpenCV",  but 
CMake did not find one. 
Could not find a package configuration file provided 
by "OpenCV" (requested version 3) with any of the following names: 

OpenCVConfig.cmake 
opencv-config.cmake 

答えて

0

を構築しているときに取得された第2の誤差(すなわちOpenCV.cmakeを行方不明)実際には最初の1に関連していません( undefined reference to)が原因です。

cmakeがOpenCVモジュールを見つけられなかった場合、${OpenCV_LIBS}は、target_link_libraries(visual_slam ${OpenCV_LIBRARIES})がコードに必要なライブラリとリンクしていないことを意味するものを行いません。それはの代わりにOpenCV_LIBSと信じています。

もちろんfind_package(...)コマンドは(私はそれがCMAKE_FIND_ROOT_PATH変数だったと思う)cmakeモジュールを見つけたり、手動でOpenCVのインストールのルートフォルダを指定して、手動でOpenCV.cmakeそのすべてのものを処理するために見てパスを指定することができますあなたのためのハンドル。

最後に、ROS Kineticが最新のOpenCV(あなたが使っているバージョン、つまりv3.2)を使用しているかどうかはわかりません。それをチェックし、異なるバージョンが使用されている場合は、すべてのROS OpenCV関連パッケージを一から作成する必要があります。 「なぜ私はそれをしなければならないのですか?」と尋ねるかもしれません。 OpenCVのバージョンXがシステム上に存在するROSとバージョンYのバイナリパッケージに使用されているため、互換性の問題やさまざまな奇妙なエラー(使用しているOpenCVの機能によって異なります)を避けるためです。 = Y)。私はPCL(ポイントクラウドライブラリ)を使ってこれを一回実行しなければなりませんでした。そして、私が得ていたエラー(地獄のようなもの)は隠されていたので、この結論に至るまで数日かかりました。競合を避けるには、ROSインストールで使用するOpenCVの1つのバージョン(cmake)をシステムにインストールしてください。これが、ROSバイナリパッケージがパッケージマネージャ(OpenCV、PCLなど)によって解決された依存関係を使用してUbuntu reposを介して出荷される理由です。

PS:私はClionを使用していないので、私はまた、いくつかの隠しcmakeは、そのネジ物事をIDE内で設定 - 関連ではないかどうかをチェックする(私は上記きた何かを行う前に)お勧めします。

+0

ありがとうございます。Clionをターミナルから起動すると、問題は解決されます。詳細についてはhttp://answers.ros.org/question/210534/jetbrains-clion-ide-setup-for-ros/ –

+0

ああ、問題はIDEに関連していました。 Qt Creator(私が使用している)btwでも同じことが起こります。 – rbaleksandar

関連する問題