0

我正在尝试使用 openCV 构建一个项目,但出现以下错误:

1>------ Build started: Project: ZERO_CHECK, Configuration: Debug Win32 ------
1>  Checking Build System
1>  CMake does not need to re-run because C:/Users/Kevin/ROBOSLAM/build/CMakeFiles/generate.stamp is up-to-date.
1>  CMake does not need to re-run because C:/Users/Kevin/ROBOSLAM/build/examples/CMakeFiles/generate.stamp is up-to-date.
1>  CMake does not need to re-run because C:/Users/Kevin/ROBOSLAM/build/examples/opencv/CMakeFiles/generate.stamp is up-to-date.
2>------ Build started: Project: ratslam, Configuration: Debug Win32 ------
3>------ Build started: Project: ratslam_graphics, Configuration: Debug Win32 ------
3>  Building Custom Rule C:/Users/Kevin/ROBOSLAM/CMakeLists.txt
3>  CMake does not need to re-run because C:\Users\Kevin\ROBOSLAM\build\CMakeFiles\generate.stamp is up-to-date.
3>  RatslamGraphics.cpp
2>  Building Custom Rule C:/Users/Kevin/ROBOSLAM/CMakeLists.txt
2>  CMake does not need to re-run because C:\Users\Kevin\ROBOSLAM\build\CMakeFiles\generate.stamp is up-to-date.
2>  Experience_Map.cpp
2>  Pose_Cell_Network.cpp
3>     Creating library C:/Users/Kevin/ROBOSLAM/build/Debug/ratslam_graphics.lib and object C:/Users/Kevin/ROBOSLAM/build/Debug/ratslam_graphics.exp
3>RatslamGraphics.obj : error LNK2019: unresolved external symbol "public: __thiscall cv::Exception::Exception(int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (??0Exception@cv@@QAE@HABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00H@Z) referenced in function "public: __thiscall cv::Mat::Mat(int,int,int,void *,unsigned int)" (??0Mat@cv@@QAE@HHHPAXI@Z)
3>RatslamGraphics.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall cv::Exception::~Exception(void)" (??1Exception@cv@@UAE@XZ) referenced in function "public: __thiscall cv::Mat::Mat(int,int,int,void *,unsigned int)" (??0Mat@cv@@QAE@HHHPAXI@Z)
3>RatslamGraphics.obj : error LNK2019: unresolved external symbol "void __cdecl cv::error(class cv::Exception const &)" (?error@cv@@YAXABVException@1@@Z) referenced in function "public: __thiscall cv::Mat::Mat(int,int,int,void *,unsigned int)" (??0Mat@cv@@QAE@HHHPAXI@Z)
3>RatslamGraphics.obj : error LNK2019: unresolved external symbol "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) referenced in function "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ)
3>RatslamGraphics.obj : error LNK2019: unresolved external symbol "public: void __thiscall cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QAEXXZ) referenced in function "public: void __thiscall cv::Mat::release(void)" (?release@Mat@cv@@QAEXXZ)
3>RatslamGraphics.obj : error LNK2019: unresolved external symbol "public: __thiscall cv::VideoWriter::VideoWriter(void)" (??0VideoWriter@cv@@QAE@XZ) referenced in function "public: __thiscall ratslam::RatslamGraphics::RatslamGraphics(class boost::property_tree::basic_ptree<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > &,class irr::IEventReceiver *,class ratslam::Ratslam *)" (??0RatslamGraphics@ratslam@@QAE@AAV?$basic_ptree@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@property_tree@boost@@PAVIEventReceiver@irr@@PAVRatslam@1@@Z)
3>C:\Users\Kevin\ROBOSLAM\build\Debug\ratslam_graphics.dll : fatal error LNK1120: 6 unresolved externals
2>..\src\ratslam\Pose_Cell_Network.cpp(716): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
2>          C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\stdio.h(218) : see declaration of 'fopen'
2>  Visual_Template_Match.cpp
2>..\src\ratslam\Visual_Template_Match.cpp(127): warning C4018: '<' : signed/unsigned mismatch
2>  Ratslam.cpp
2>  Generating Code...
2>c:\users\kevin\roboslam\src\ratslam\experience_map.cpp(277): warning C4715: 'ratslam::Experience_Map::dijkstra_distance_between_experiences' : not all control paths return a value
2>     Creating library C:/Users/Kevin/ROBOSLAM/build/Debug/ratslam.lib and object C:/Users/Kevin/ROBOSLAM/build/Debug/ratslam.exp
2>  ratslam.vcxproj -> C:\Users\Kevin\ROBOSLAM\build\Debug\ratslam.dll
4>------ Build started: Project: ratslam_opencv_example, Configuration: Debug Win32 ------
4>  Building Custom Rule C:/Users/Kevin/ROBOSLAM/examples/opencv/CMakeLists.txt
4>  CMake does not need to re-run because C:\Users\Kevin\ROBOSLAM\build\examples\opencv\CMakeFiles\generate.stamp is up-to-date.
4>  main.cpp
4>C:\Users\Kevin\ROBOSLAM\libraries\OpenCV2.3\build\include\opencv2/flann/logger.h(70): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
4>          C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\stdio.h(218) : see declaration of 'fopen'
4>..\..\..\examples\opencv\main.cpp(97): warning C4101: 'time_s' : unreferenced local variable
4>..\..\..\examples\opencv\main.cpp(97): warning C4101: 'last_time_s' : unreferenced local variable
4>     Creating library C:/Users/Kevin/ROBOSLAM/build/examples/opencv/Debug/ratslam_opencv_example.lib and object C:/Users/Kevin/ROBOSLAM/build/examples/opencv/Debug/ratslam_opencv_example.exp
4>main.obj : error LNK2019: unresolved external symbol "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) referenced in function "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ)
4>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QAEXXZ) referenced in function "public: void __thiscall cv::Mat::release(void)" (?release@Mat@cv@@QAEXXZ)
4>main.obj : error LNK2019: unresolved external symbol "public: __thiscall cv::VideoCapture::VideoCapture(void)" (??0VideoCapture@cv@@QAE@XZ) referenced in function _main
4>main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall cv::VideoCapture::~VideoCapture(void)" (??1VideoCapture@cv@@UAE@XZ) referenced in function _main
4>main.obj : error LNK2019: unresolved external symbol "public: virtual bool __thiscall cv::VideoCapture::open(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?open@VideoCapture@cv@@UAE_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function _main
4>main.obj : error LNK2019: unresolved external symbol "public: virtual bool __thiscall cv::VideoCapture::isOpened(void)const " (?isOpened@VideoCapture@cv@@UBE_NXZ) referenced in function _main
4>main.obj : error LNK2019: unresolved external symbol "public: virtual bool __thiscall cv::VideoCapture::grab(void)" (?grab@VideoCapture@cv@@UAE_NXZ) referenced in function _main
4>main.obj : error LNK2019: unresolved external symbol "public: virtual bool __thiscall cv::VideoCapture::retrieve(class cv::Mat &,int)" (?retrieve@VideoCapture@cv@@UAE_NAAVMat@2@H@Z) referenced in function _main
4>C:\Users\Kevin\ROBOSLAM\build\examples\opencv\Debug\ratslam_opencv_example.exe : fatal error LNK1120: 8 unresolved externals
5>------ Skipped Build: Project: ALL_BUILD, Configuration: Debug Win32 ------
5>Project not selected to build for this solution configuration 
========== Build: 2 succeeded, 2 failed, 0 up-to-date, 1 skipped ==========

我正在使用 cMake 文件来创建项目,它的内容如下:

cmake_minimum_required(VERSION 2.8)

project(ratslam)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)


file(GLOB RATSLAM_INCLUDES src/ratslam/*.h src/ratslam/*.hpp)
file(GLOB RATSLAM_GRAPHICS_INCLUDES src/graphics/*.h src/graphics/*.hpp)
file(GLOB GRI_INCLUDES src/gri/*.h src/gri/*.hpp)
file(COPY ${RATSLAM_INCLUDES};${RATSLAM_GRAPHICS_INCLUDES};${GRI_INCLUDES} DESTINATION include)

include_directories("/libraries/OpenCV2.3/build")

include_directories("C:/Users/Kevin/ROBOSLAM/irrlicht-1.8/include")
link_directories("C:/Users/Kevin/ROBOSLAM/irrlicht-1.8/include")

include_directories("/libraries/boost_1_53_0")
include_directories("C:/Users/Kevin/ROBOSLAM/libraries/OpenCV2.3/build/include")
link_directories("/libraries/boost_1_53_0")

include_directories("C:/Users/Kevin/ROBOSLAM/libraries/boost_1_53_0")
link_directories("C:/Users/Kevin/ROBOSLAM/libraries/boost_1_53_0/")

link_directories("C:/Users/Kevin/ROBOSLAM/libraries/boost_1_53_0/stage/lib")


include_directories("${CMAKE_BINARY_DIR}/include")
add_definitions(-DRATSLAM_EXPORTS -DRATSLAM_GRAPHICS_EXPORTS)
add_library(ratslam SHARED src/ratslam/Experience_Map.cpp src/ratslam/Pose_Cell_Network.cpp src/ratslam/Visual_Template_Match.cpp src/ratslam/Ratslam.cpp)
target_link_libraries(ratslam ${Boost_DATE_TIME_LIBRARY})
add_library(ratslam_graphics SHARED src/graphics/RatslamGraphics.cpp)
target_link_libraries(ratslam_graphics Irrlicht ${OpenCV_LIBS})
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/include)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

message(STATUS "headers include ${RATSLAM_INCLUDES};${RATSLAM_GRAPHICS_INCLUDES}")
set(RATSLAM_LIBS ratslam ratslam_graphics)
add_subdirectory(examples)

似乎所有 openCV 方法都导致了错误。知道为什么吗?我相信我将所有库/头文件正确导入到项目中,但我仍然遇到这些问题。任何帮助/指出我正确的方向都会很棒。谢谢!

4

1 回答 1

1

从上面显示的错误中,我假设您使用的是 RatSLAM C++ 库,并且在 VS 2010 中编译期间我也遇到了相同的错误。我能够在以下链接的帮助下解决它:

基于 Visual Studio LINK 错误的 OpenCV 构建

上面的链接说应该配置某些 lib 文件,例如 OpenCV 库文件夹中的 opencv_core246.lib 和 opencv_highgui246.lib。该链接还引导您进入解释如何配置它们的教程:

为 Visual Studio 2010 设置 OpenCV-2.3

我希望这有帮助。

于 2013-09-09T18:29:28.583 回答