2015-04-15 2 views
-1

Я пытаюсь скомпилировать код C++ в ROS индиго, используя catkin_make под Ubuntu 14.04. Я получаю следующее сообщение об ошибке:Ошибка компиляции OpenCV с nonfree/feature2d.hpp

/usr/local/include/opencv2/nonfree/features2d.hpp:73:21: error: ‘vector’ has not been declared 
        vector<KeyPoint>& keypoints) const; 
        ^
/usr/local/include/opencv2/nonfree/features2d.hpp:73:27: error: expected ‘,’ or ‘...’ before ‘<’ token 
        vector<KeyPoint>& keypoints) const; 
         ^
/usr/local/include/opencv2/nonfree/features2d.hpp:77:21: error: ‘vector’ has not been declared 
        vector<KeyPoint>& keypoints, 
        ^
/usr/local/include/opencv2/nonfree/features2d.hpp:77:27: error: expected ‘,’ or ‘...’ before ‘<’ token 
        vector<KeyPoint>& keypoints, 

ли кто-нибудь имеет ключ, что может быть проблема? Обратите внимание, что эта ошибка возникает в feature2d.hpp из OpenCV (так что это не файл, который я сделал). Я уже пытался переустановить OpenCV, а также ROS, но это не исправило ошибку.

Я был бы очень благодарен, если бы кто-нибудь знал, как это решить.

Спасибо,

снег

Edit: Вот CMakeLists.txt:

cmake_minimum_required (VERSION 2.8.3) 
project (test) 
set (test_VERSION "1.0.0") 

find_package(OpenCV REQUIRED)   

if (NOT OpenCV_FOUND) 
    message(FATAL_ERROR "Package OpenCV required, but not found!") 
endif(NOT OpenCV_FOUND) 

find_package(Eigen3 REQUIRED)   

include_directories(
    ${EIGEN3_INCLUDE_DIR}    
    ${CMAKE_CURRENT_SOURCE_DIR}/include 
    ${OpenCV_INCLUDE_DIRS} 
) 

set (SOURCE 
    src/test.cpp) 

add_library (test ${SOURCE}) 
set_target_properties (test PROPERTIES 
    COMPILE_FLAGS "-std=c++11") 

target_link_libraries(test ${OpenCV_LIBS} ${EIGEN3_LIBRARY_DIRS}) 
+0

Являются ли эти 4 строки единственными ошибками, которые вы получаете? Если это так, это проблема связи. Не могли бы вы добавить 'CMakeLists.txt'? – alextoind

+0

Я также попытался скомпилировать еще один код моего с cmake, который работал до этого, и теперь его больше нет ... Думаю, я испортил переменную окружения. Тем не менее, вот снимок из CMakeLists.txt кода, который раньше работал с ошибкой: cmake_minimum_required (версия 2.8.3) проект (тест) набор (test_VERSION "1.3.0") find_package (OpenCV ОБЯЗАТЕЛЬНО) \t \t \t include_directories ( $ {OpenCV_INCLUDE_DIRS} ) target_link_libraries (тест $ {OpenCV_LIBS}) snow

+0

Это будет более читаемо, если вы отредактируете свое предыдущее сообщение и добавите весь текст 'CMakeLists.txt'. – alextoind

ответ

2

Я своего рода исправил его, но я думаю, что это не правильно способ сделать это:

ROS уже поставляется с версией OpenCV. На моем компьютере я также установил отдельную новую версию OpenCV. Я исправил его, изменив имена двух каталогов opencv и opencv2 в каталоге /opt/ros/indigo/include. Теперь компилятор больше не использует ROS OpenCV, а тот, который я установил, и который исправляет мою проблему.

Опять же, я думаю, что это не так, как должно быть сделано, поэтому, если у кого-то есть лучшая идея, пожалуйста, дайте мне знать!

+0

Здравствуйте @snow, я получаю ту же проблему в нефрит ROS. В/opt/ros/jade/include. У меня есть opencv_apps, а не opencv и opencv2. Но я хочу попробовать ваш подход! Так что же означает «изменение имен двух папок ...»? Вы меняете имена папок? Спасибо, что нашли время на мой вопрос. – willSapgreen

-1

Try писать только перед включением opencv2:

#include <vector> 
using namespace std; 
+0

Это просто дает мне другие ошибки в feature2d.hpp. Также почему мне нужно включить вектор раньше, а также использовать пространство имен std. Я никогда не видел, чтобы вы это делали, чтобы использовать безболезненные включения из opencv? – snow