【发布时间】:2016-09-30 09:05:03
【问题描述】:
我无法链接我自己安装的 opencv3 与 ros 分开。收到此错误
../devel/lib/libirTest.so: undefined reference to `cv::ORB::create(int, float, int, int, int, int, int, int, int)'
../devel/lib/libirTest.so: undefined reference to `cv::calcOpticalFlowPyrLK(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputOutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, cv::Size_<int>, int, cv::TermCriteria, int, double)'
但是,我能够在 ROS 外部成功编译;也就是说,使用没有ROS的类似包....这是我在ROS下使用的CMake文件(不起作用)
cmake_minimum_required(VERSION 2.8.3)
project(my_test_pkg)
SET(SRC ${CMAKE_CURRENT_SOURCE_DIR}/src)
find_package(catkin REQUIRED COMPONENTS
cv_bridge
image_transport
roscpp
rospy
std_msgs
message_generation
genmsg
)
find_package(nodelet REQUIRED)
################################################
## Declare ROS messages, services and actions ##
################################################
add_message_files(
FILES
velocity_trsl.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
catkin_package(
CATKIN_DEPENDS message_generation cv_bridge image_transport roscpp rospy std_msgs
)
###########
## Build ##
###########
include_directories(
${catkin_INCLUDE_DIRS}
)
#***********************
#****** GSL
#***********************
find_package( PkgConfig REQUIRED)
pkg_check_modules( gsl REQUIRED gsl )
#***********************
#****** Boost
#***********************
SET (BOOST_DIR "/home/polar/soft/lib/boost/boost_1_61_0")
FIND_PACKAGE(Boost 1.61.0 REQUIRED thread)
if (NOT Boost_FOUND)
message(FATAL_ERROR " Fatal error: Boost (version >= 1.55) required.")
else()
message(STATUS "Setting up BOOST")
message(STATUS " Includes - ${Boost_INCLUDE_DIRS}")
message(STATUS " Library - ${Boost_LIBRARY_DIRS}")
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
endif (NOT Boost_FOUND)
#***********************
#****** OpenCV
#***********************
find_package( OpenCV 3.1.0 REQUIRED )
find_package( OpenCV 3.1.0 REQUIRED PATHS /home/polar/soft/lib/opencv/opencv-3.1.0/cmake)
if (NOT OpenCV_FOUND)
message(FATAL_ERROR "*****!!!!! opencv NOT found.")
endif (NOT OpenCV_FOUND)
#****************************************
include_directories(${SRC}/calculus)
SET(MY_LIB
irTest
)
# ALL EXEC FILES...
SET(EXE_TESTER
tester1
)
add_executable(tester1 ${CMAKE_CURRENT_SOURCE_DIR}/exe-main-files-stdl/testdir/tester1.cpp )
SET(FILES_2_RUN
${EXE_TESTER}
)
#--------------------------
foreach(file2link ${FILES_2_RUN})
target_link_libraries(${file2link}
${catkin_LIBRARIES}
${Boost_LIBRARIES}
${gsl_LIBRARIES}
${OpenCV_LIBRARIES}
${OpenCV_LIBS}
${MY_LIB}
)
add_dependencies(${file2link} my_test_pkg_generate_messages_cpp)# newlly added for messages!!
endforeach(file2link)
add_subdirectory(src)
是否应该是正在使用的opencv版本与ROS使用的(v2.4)版本之间的冲突?也许 cv_bridge 或 image_transport 正在造成这个问题......(???)我什至删除了 build/ 和 devel/ 并尝试再次编译,但总是同样的问题......我从来没有花这么长时间比这个问题...
【问题讨论】:
-
Here 这似乎暗示 OpenCV 3 应该是当今 ROS 的默认设置。
-
我重新安装了 ubuntu 14 和 ROS Indigo 并尝试编译但仍然是同样的问题。但是,它在带有 ROS Kinetic 的 ubuntu 16 下运行良好。请注意,我采用了在 Indigo 下不起作用的相同包,该包现在仍然可以正常工作......但仍然无法将我的 ros 包与我自己安装的 opencv 链接
-
@polar 你有没有设法在 ubuntu 14 上解决这个问题,或者你是否以升级结束?
标签: c++ cmake opencv3.0 ros catkin