2012-07-02 79 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」嗎?添加'消息(STATUS $ {LIBS})'來找出。 – arrowd

+0

它有它: - -L/usr/local/lib -lgsl -lgslcblas -lm – mark