프로그램 컴파일 오류 기록 및 해결 방안

7373 단어 필기
2016.07.07
RGB-D SLAM(6)을 함께 컴파일하는 중 오류가 발생했습니다.
CMakeFiles/slamEnd.dir/slamEnd.cpp.o: In function `g2o::LinearSolverCSparse<:matrix> >::solve(g2o::SparseBlockMatrix<:matrix> > const&, double*, double*)':
/opt/ros/indigo/include/g2o/solvers/csparse/linear_solver_csparse.h:126: undefined reference to `g2o::csparse_extension::cs_cholsolsymb(cs_di_sparse const*, double*, cs_di_symbolic const*, double*, int*)'
/opt/ros/indigo/include/g2o/solvers/csparse/linear_solver_csparse.h:130: undefined reference to `g2o::csparse_extension::writeCs2Octave(char const*, cs_di_sparse const*, bool)'
CMakeFiles/slamEnd.dir/slamEnd.cpp.o: In function `g2o::LinearSolverCSparse<:matrix> >::solveBlocks(double**&, g2o::SparseBlockMatrix<:matrix> > const&)':
/opt/ros/indigo/include/g2o/solvers/csparse/linear_solver_csparse.h:171: undefined reference to `g2o::csparse_extension::cs_chol_workspace(cs_di_sparse const*, cs_di_symbolic const*, int*, double*)'
CMakeFiles/slamEnd.dir/slamEnd.cpp.o: In function `g2o::LinearSolverCSparse<:matrix> >::solvePattern(g2o::SparseBlockMatrix<:matrix> >&, std::vector<:pair int="">, std::allocator<:pair int=""> > > const&, g2o::SparseBlockMatrix<:matrix> > const&)':
/opt/ros/indigo/include/g2o/solvers/csparse/linear_solver_csparse.h:208: undefined reference to `g2o::csparse_extension::cs_chol_workspace(cs_di_sparse const*, cs_di_symbolic const*, int*, double*)'

대략undefined reference to `g2o::csparse extension::, Google 신기를 꺼내서 큰 신의 해독을 찾습니다:https://github.com/tum-vision/dvo_slam/issues/2g2o를 설치하기 전에libsuitesparse-dev를 설치하지 않았다고 합니다.
sudo apt-get install libsuitesparse-dev

나중에 설치되어 있는 것을 발견했습니다. 이때 g2o를 설치한 후에 오늘까지 설치한 것일 수도 있습니다. 그래서 g2o 패키지에 들어가서 다시 컴파일하고 설치한 다음에 RGB-D SLAM의 프로그램을 컴파일하면 ok입니다.
2016.07.07
RGB-D 슬램 같이 하고 있어요(5)http://www.cnblogs.com/gaoxiang12/p/4719156.html오류 발생: undefined reference to `cv: initModulenonfree () 는 initModulenonfree는 정의되지 않았습니다.이유를 찾지 못해 학우의 블로그를 찾았습니다.http://blog.csdn.net/zyh821351004/article/details/47322823, 이 모듈이 제대로 설치되어 있지 않다는 뜻입니다. 설치 방법은 다음과 같습니다.
sudo add-apt-repository --yes ppa:xqms/opencv-nonfree  
sudo apt-get update  
sudo apt-get install libopencv-nonfree-dev 

그리고 다시 프로그램을 컴파일하면 된다.
2016.06.29 자신이 오픈cv를 써서 그림을 읽는 프로그램을 만들었고 프로젝트 데모는 고샹과 함께 RGBD(2)에 구축된 것으로 원본 파일에 간단한 오픈cv 읽기 프로그램을 몇 줄 추가했는데 다음과 같은 오류가 발생했습니다.
CMakeFiles/main.dir/main.cpp.o: In function `cv::Mat::~Mat()':
main.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x69): undefined reference to `cv::Mat::deallocate()'
main.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x54): undefined reference to `cv::fastFree(void*)'
CMakeFiles/main.dir/main.cpp.o: In function `main':
main.cpp:(.text.startup+0xdf): undefined reference to `cv::imread(std::string const&, int)'
main.cpp:(.text.startup+0x176): undefined reference to `cv::Mat::copySize(cv::Mat const&)'
main.cpp:(.text.startup+0x1db): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
main.cpp:(.text.startup+0x201): undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
main.cpp:(.text.startup+0x21b): undefined reference to `cv::waitKey(int)'
main.cpp:(.text.startup+0x284): undefined reference to `cv::Mat::deallocate()'

원인을 분석한 결과 원본 파일 코드를 추가할 때 상응하는 의존항을 추가하지 않았기 때문에 원본 파일을 같은 등급의 CMakeLists.txt에서:FIND 로 변경PACKAGE( OpenCV REQUIRED ) add_executable( main main.cpp ) TARGET_LINK_LIBRARIES(main ${OpenCV LIBS}) 순서가 틀리면 안 됩니다.
2016.06.12 ‘ORB_SLAM-master’ depends on non-existent package ‘opencv2’ google:take out all opencv dependencies from the package.xml…. that does the trick. Since ROS Hyrdo, opencv is included in core solved:remove in manifest.xml in package
2016.06.13 ORB_SLAM :cmake+make successfully but when open CmakeLists.txt with Qt error: include could not find load file: /core/rosbuild/rosbuild.cmake CmakeLists.txt line2 open CmakeLists.txt in line2 we find that it should be error with $ENV{ROS_ROOT}:
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)

so we write as:
include(/opt/ros/indigo/share/core/rosbuild/rosbuild.cmake)

2016.06.27 OpenCV SfM 프로그램 심층 분석
(1):’SURF_GPU': is not a member of'cv:::gpu'Google SURF 발견GPU는/opencv2/nonfree/gpu입니다.hpp 안에 있기 때문에 GPUSURFfeature Matcher.h 추가
#include 

가능(2): Math/v3dlinear.h: No such file or directory Google은 SSBA Library가 설치되어 있지 않은 것을 발견했습니다. SSBA를 다운로드한 후에 cmake+make는 문제가 없습니다. 그러나 이 라이브러리 경로를 cmake가 찾을 수 있도록 하지 않습니다. 마지막으로 제3자 라이브러리의 문제를 해결하지 못하면 그를 호출한 곳을 절대 경로로 바꿉니다. #include 또는: CMakeLists에서txt에서 set(SSBA LIBRARY DIR "${CMAKE SOURCE DIR}/SSBA-3.0/build"CACHE PATH "Directory to find SSSBA libs")는 set(SSBA LIBRARY DIR "/home/kylefan/program/mastering opencv/Chapter4 Structure Frommotion/SBA-3.0/build"CACHE PATHBACH Matchery Bricturter3(Sechery Matchery)로 변경됩니다.GPU'was not declared in this scope, 방금 gpu 라이브러리를 변경했기 때문에 원래의 gpu.h 더하기:
#include 
#include 

(4):'toROSMsg'is not a member of'pcl'Googlecpp에 추가:
#include 

컴파일 통과!
사실 위의 많은 문제는 오픈cv 버전 문제로 인해 발생한 것이다. 컴퓨터에 설치된 것은 2.4.13이고git 홈페이지에 2.4.2-2.4.11을 지원한다고 적혀 있기 때문에 많은 문제는 자신이 홈페이지 설명을 잘 보지 않아서 생긴 것이다!

좋은 웹페이지 즐겨찾기