2012-07-02 2 views
2

빌드 폴더 (KinectSLAM6D/build.)를 성공적으로 구성하고 생성 할 수있었습니다. 그러나 make를 사용하여 빌드하려고하면 gsl을 찾을 수 없다는 오류가 발생합니다. 나는 이것이 gsl을 설치했기 때문에 구성 문제 일 뿐이라고 확신한다. (그들은 usr/local에있다.) 그러나 나는 그것을 설정할 수 없다. 나는 CMakeList에 다음 줄을 추가하려고 시도했다 :cmake에서 gsl 설정 문제가 발생했습니다.

include_directories(${GSL_INCLUDE_DIRS} ${GSLCBLAS_INCLUDE_DIRS}) 
set(LIBS ${LIBS} ${GSL_LIBRARIES} ${GSLCBLAS_LIBRARIES}) 

나는 아래의 적절한 출력을 복사했다. gsl (-lgsl을 추가)을 사용하여 컴파일에 대한 몇 가지 답변을 찾았습니다. 그러나, 나는 그것을 CMakeLists 나 생성 된 MakeList와 MakeList2 파일에 넣을 곳이 없다.

Here's the generated output. 
.... 
[ 44%] Building CXX object CMakeFiles/Kinect6DSLAM.dir/src/GraphOptimizer_G2O.cpp.o 
[ 45%] Building CXX object CMakeFiles/Kinect6DSLAM.dir/src/CKinect2DRawlog.cpp.o 
Linking CXX executable Kinect6DSLAM 
    /usr/bin/ld: warning: libopencv_core.so.2.3, needed by /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libmrpt-base.so, may conflict with libopencv_core.so.2.4 
    /usr/bin/ld: warning: libopencv_imgproc.so.2.3, needed by /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libmrpt-base.so, may conflict with libopencv_imgproc.so.2.4 
    /usr/bin/ld: warning: libopencv_highgui.so.2.3, needed by /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libmrpt-base.so, may conflict with libopencv_highgui.so.2.4 
    ../gicp/libgicp.a(gicp.o): In function `dgc::gicp::GICPPointSet::ComputeMatrices()': 
    gicp.cpp:(.text+0x462): undefined reference to `gsl_vector_alloc' 
    gicp.cpp:(.text+0x470): undefined reference to `gsl_vector_alloc' 
... a bunch more undefined references to gsl 
collect2: ld returned 1 exit status 
make[2]: *** [Kinect6DSLAM] Error 1 
make[1]: *** [CMakeFiles/Kinect6DSLAM.dir/all] Error 2 
make: *** [all] Error 2 

전체 CMakeList.txt. Miguel Algaba의 SLAM 프로젝트를 실행하려고합니다.

PROJECT(KinectSLAM6D) 

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR) 
if(COMMAND cmake_policy) 
     cmake_policy(SET CMP0003 NEW) # Required by CMake 2.7+ 
endif(COMMAND cmake_policy) 

# Set the output directory for the build executables 
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build) 

#Add here your project dependencies 
FIND_PACKAGE(MRPT REQUIRED hwdrivers maps graphslam) #Add here your project dependencies 
FIND_PACKAGE(PCL REQUIRED) 
FIND_PACKAGE(OpenCV REQUIRED) 

INCLUDE_DIRECTORIES(${PCL_INCLUDE_DIRS}) 
LINK_DIRECTORIES(${PCL_LIBRARY_DIRS}) 
ADD_DEFINITIONS(${PCL_DEFINITIONS}) 

# Required by StanfordGICP 
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) 
FIND_PACKAGE(GSL REQUIRED) 
include_directories(${GSL_INCLUDE_DIRS} ${GSLCBLAS_INCLUDE_DIRS}) 
set(LIBS ${LIBS} ${GSL_LIBRARIES} ${GSLCBLAS_LIBRARIES}) 
FIND_PACKAGE(Boost COMPONENTS system program_options REQUIRED) 
include_directories(${PROJECT_SOURCE_DIR}/gicp) 
include_directories(${PROJECT_SOURCE_DIR}/gicp/ann_1.1.1/include/ANN) 
# G2O library 

# Set up the top-level include directories 
SET(G2O_INCLUDE ${PROJECT_SOURCE_DIR}/EXTERNAL/g2o CACHE PATH "Directory of G2O") 
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR} ${G2O_INCLUDE}) 

# Add g2o lib dir 
LINK_DIRECTORIES(${LINK_DIRECTORIES} "${G2O_INCLUDE}/lib") 

#Generate config.h 
configure_file(g2o/trunk/config.h.in ${PROJECT_BINARY_DIR}/g2o/config.h) 
include_directories(${PROJECT_BINARY_DIR}) 
INSTALL(FILES ${PROJECT_BINARY_DIR}/g2o/config.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include/g2o) 

# Include the subdirectories 
ADD_SUBDIRECTORY(g2o/trunk) 

INCLUDE_DIRECTORIES(${CSPARSE_INCLUDE_DIR}) #You can use CPARSE or CHOLMOD 
INCLUDE_DIRECTORIES(${CHOLMOD_INCLUDE_DIR}) 

set(G2O_DIR ${PROJECT_SOURCE_DIR}/g2o/trunk) 
include_directories(${G2O_DIR}) 
link_directories(${G2O_DIR}/lib) 


# Declare the target (an executable) 
ADD_EXECUTABLE(Kinect6DSLAM kinect6DSLAM.cpp 
./include/KinectGrabber.h 
./include/KinectGrabber_OpenNI.h 
./src/KinectGrabber_OpenNI.cpp 
./include/KinectGrabber_Rawlog.h 
./src/KinectGrabber_Rawlog.cpp 
./include/KinectGrabber_Rawlog2.h 
./src/KinectGrabber_Rawlog2.cpp 
./include/KinectGrabber_MRPT.h 
./src/KinectGrabber_MRPT.cpp 
./include/VisualFeatureDescriptorExtractor.h 
./include/VisualFeatureDescriptorExtractor_SURF_GPU.h 
./include/VisualFeatureDescriptorExtractor_Generic.h 
./include/VisualFeatureDescriptorExtractor_ORB.h 
./include/VisualFeatureMatcher.h 
./include/VisualFeatureMatcher_Generic.h 
./include/PointCloudViewer.h 
./include/PointCloudViewer_MRPT.h 
./src/VisualFeatureDescriptorExtractor_SURF_GPU.cpp 
./src/VisualFeatureDescriptorExtractor_Generic.cpp 
./src/VisualFeatureDescriptorExtractor_ORB.cpp 
./src/VisualFeatureMatcher_Generic.cpp 
./src/PointCloudViewer_MRPT.cpp 
./include/Visual3DRigidTransformationEstimator.h 
./include/Visual3DRigidTransformationEstimator_SVD.h 
./src/Visual3DRigidTransformationEstimator_SVD.cpp 
./include/Visual3DRigidTransformationEstimator_RANSAC.h 
./src/Visual3DRigidTransformationEstimator_RANSAC.cpp 
./include/ICPPoseRefiner.h 
./include/ICPPoseRefiner_PCL.h 
./src/ICPPoseRefiner_PCL.cpp 
./include/ICPPoseRefiner_StanfordGICP.h 
./src/ICPPoseRefiner_StanfordGICP.cpp 
./include/Miscellaneous.h 
./src/Miscellaneous.cpp 
./include/FrameRGBD.h 
./src/FrameRGBD.cpp 
./include/PointCloudDownsampler.h 
./src/PointCloudDownsampler.cpp 
./include/KeyframeLoopDetector.h 
./src/KeyframeLoopDetector.cpp 
./include/GraphOptimizer.h 
./include/GraphOptimizer_MRPT.h 
./src/GraphOptimizer_MRPT.cpp 
./include/GraphOptimizer_G2O.h 
./src/GraphOptimizer_G2O.cpp 
./include/CKinect2DRawlog.h 
./src/CKinect2DRawlog.cpp 
) 

TARGET_LINK_LIBRARIES(Kinect6DSLAM ${MRPT_LIBS} 
        ${PCL_LIBRARIES} 
        ${OpenCV_LIBS} 
         ${Boost_LIBRARIES} 
        #GICP 
            ${GSL_LIBRARIES} 
            ${PROJECT_SOURCE_DIR}/gicp/ann_1.1.1/lib/libANN.a 
            ${PROJECT_SOURCE_DIR}/gicp/libgicp.a 
        #G2O 
        core math_groups types_slam3d 
          solver_csparse #You can use CPARSE or CHOLMOD 
          solver_cholmod ${CHOLMOD_LIBRARIES} 
        ) 

# Declare the target (an executable) 
ADD_EXECUTABLE(PairwiseAlignmentSteps PairwiseAlignmentSteps.cpp 
./include/KinectGrabber.h 
./include/KinectGrabber_OpenNI.h 
./src/KinectGrabber_OpenNI.cpp 
./include/KinectGrabber_Rawlog.h 
./src/KinectGrabber_Rawlog.cpp 
./include/KinectGrabber_MRPT.h 
./src/KinectGrabber_MRPT.cpp 
./include/VisualFeatureDescriptorExtractor.h 
./include/VisualFeatureDescriptorExtractor_SURF_GPU.h 
./include/VisualFeatureDescriptorExtractor_Generic.h 
./include/VisualFeatureDescriptorExtractor_ORB.h 
./include/VisualFeatureMatcher.h 
./include/VisualFeatureMatcher_Generic.h 
./include/PointCloudViewer.h 
./include/PointCloudViewer_MRPT.h 
./src/VisualFeatureDescriptorExtractor_SURF_GPU.cpp 
./src/VisualFeatureDescriptorExtractor_Generic.cpp 
./src/VisualFeatureDescriptorExtractor_ORB.cpp 
./src/VisualFeatureMatcher_Generic.cpp 
./src/PointCloudViewer_MRPT.cpp 
./include/Visual3DRigidTransformationEstimator.h 
./include/Visual3DRigidTransformationEstimator_SVD.h 
./src/Visual3DRigidTransformationEstimator_SVD.cpp 
./include/Visual3DRigidTransformationEstimator_RANSAC.h 
./src/Visual3DRigidTransformationEstimator_RANSAC.cpp 
./include/ICPPoseRefiner.h 
./include/ICPPoseRefiner_PCL.h 
./src/ICPPoseRefiner_PCL.cpp 
./include/ICPPoseRefiner_StanfordGICP.h 
./src/ICPPoseRefiner_StanfordGICP.cpp 
./include/Miscellaneous.h 
./src/Miscellaneous.cpp 
./include/FrameRGBD.h 
./src/FrameRGBD.cpp 
./include/PointCloudDownsampler.h 
./src/PointCloudDownsampler.cpp 
) 

TARGET_LINK_LIBRARIES(PairwiseAlignmentSteps ${MRPT_LIBS} 
        ${PCL_LIBRARIES} 
        ${OpenCV_LIBS} 
         ${Boost_LIBRARIES} 
        #GICP 
            ${GSL_LIBRARIES} 
            ${PROJECT_SOURCE_DIR}/gicp/ann_1.1.1/lib/libANN.a 
            ${PROJECT_SOURCE_DIR}/gicp/libgicp.a 
        ) 

# Set optimized building: 
IF(CMAKE_COMPILER_IS_GNUCXX AND NOT CMAKE_BUILD_TYPE MATCHES "Debug") 
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -mtune=native") 
ENDIF(CMAKE_COMPILER_IS_GNUCXX AND NOT CMAKE_BUILD_TYPE MATCHES "Debug") 
target_link_libraries(Kinect6DSLAM ${LIBS}) 

답변

3

무언가 알려주면, target_link_libraries(Kinect6DSLAM ${LIBS})을 추가하면 도움이 될 것입니다. 당신이 사용할 수

set(VAR ${VAR} somethingelse) 

같은 또한

, 대신 구조 : 귀하의 코멘트에 대한

list(APPEND VAR somethingelse) 
+0

감사합니다. 끝에 그 라인을 추가하는 것은 효과가 없었습니다. 나는 그것이 CMake에 문제가되지 않을 것이라고 생각하기 시작했는데, 무엇이 그 원인인지 전혀 모른다. – mark

+0

'$ {LIBS}'var에 "-lgsl"이 포함되어 있습니까? 찾으려면'message (STATUS $ {LIBS})'를 추가하십시오. – arrowd

+0

그것은 다음과 같습니다 : - -L/usr/local/lib -lgsl -lgslcblas -lm – mark