zoukankan      html  css  js  c++  java
  • MultiCol-SLAM Android NDK 交叉编译问题记录

    MultiCol-SLAM

    ThirdParty Dependencies:

    修改编译脚本:

    echo "Configuring and building Thirdparty/opencv ..."
    cd ThirdParty/opencv-3.1.0
    mkdir build
    cd build
    cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake
    make -j4
    make install
    
    cd ../../../
    
    echo "Configuring and building Thirdparty/DBoW2 ..."
    cd ThirdParty/DBoW2
    mkdir build
    cd build
    cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake
    make -j
    
    
    cd ../../
    echo "Configuring and building Thirdparty/g2o ..."
    
    EIGEN3_INCLUDE_DIR=$(pwd)/Eigen
    export EIGEN3_INCLUDE_DIR
    
    cd g2o
    mkdir build
    cd build
    cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake
    make
    
    echo "Configuring and building Thirdparty/opengv ..."
    
    cd ../../OpenGV
    
    mkdir build
    cd build
    cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake
    make -j2
    
    echo "Configuring and building MultiCol-SLAM ..."
    cd ../../../
    echo $(pwd)
    mkdir build
    cd build
    #cmake .. -DCMAKE_BUILD_TYPE=Debug
    cmake .. -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake
    make -j2
    

    开始编译首先source

    source /opt/android-ndk-r21b-linux-x86_64/environment-setup-aarch64-android-linux 
    

     Pangolin:在android 不使用Pangolin不显示,所以用不编译

    OpenCV 3:NDK中没有opencv,需要把opencv 源码放入第三方依赖,编译问题:

    MultiCol-SLAM/ThirdParty/opencv-3.1.0/3rdparty/libpng/pngrutil.c:3943: undefined reference to `png_init_filter_functions_neon'
    

    找不到png_init_filter_functions_neon实现。android NDK不支持PNG_ARM_NEON加速

    修改代码如下:pngpriv.h line:128

    #  if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && 
    改成=====================>
    #   if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && 
    

    DBoW2

    CMake Error at CMakeLists.txt:33 (find_package):
    

     find opencv package 失败,NDK中没有install opencv 所以失败,CMakeLists需要手动添加include和lib路径:

    clang++: error: the clang compiler does not support '-march=native'
    

     不支持编译标签 -march=native,CMakeLists删除-march=native

    MultiCol-SLAM/ThirdParty/DBoW2/DBoW2/FORB.cpp:19:10: fatal error: 'stdint-gcc.h' file not found
    

     找不到stdint-gcc.h头文件,改成stdint.h

    ../../opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_core.a(system.cpp.o): In function `cv::error(cv::Exception const&)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/ThirdParty/opencv-3.1.0/modules/core/src/system.cpp:643: undefined reference to `__android_log_print'
    ../../opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_core.a(persistence.cpp.o): In function `icvCloseFile(CvFileStorage*)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/ThirdParty/opencv-3.1.0/modules/core/src/persistence.cpp:308: undefined reference to `gzclose'
    ../../opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_core.a(persistence.cpp.o): In function `icvRewind(CvFileStorage*)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/ThirdParty/opencv-3.1.0/modules/core/src/persistence.cpp:323: undefined reference to `gzrewind'
    ../../opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_core.a(persistence.cpp.o): In function `icvCloseFile(CvFileStorage*)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/ThirdParty/opencv-3.1.0/modules/core/src/persistence.cpp:308: undefined reference to `gzclose'
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/ThirdParty/opencv-3.1.0/modules/core/src/persistence.cpp:308: undefined reference to `gzclose'
    ../../opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_core.a(persistence.cpp.o): In function `cvOpenFileStorage':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/ThirdParty/opencv-3.1.0/modules/core/src/persistence.cpp:2714: undefined reference to `gzopen'
    ../../opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_core.a(persistence.cpp.o): In function `icvPuts(CvFileStorage*, char const*)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/ThirdParty/opencv-3.1.0/modules/core/src/persistence.cpp:253: undefined reference to `gzputs'
    ../../opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_core.a(persistence.cpp.o): In function `icvGets(CvFileStorage*, char*, int)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/ThirdParty/opencv-3.1.0/modules/core/src/persistence.cpp:283: undefined reference to `gzgets'
    ../../opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_core.a(persistence.cpp.o): In function `icvEof(CvFileStorage*)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/ThirdParty/opencv-3.1.0/modules/core/src/persistence.cpp:297: undefined reference to `gzeof'
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/ThirdParty/opencv-3.1.0/modules/core/src/persistence.cpp:297: undefined reference to `gzeof'
    

     链接错误:opencv 使用了libzlib和log 在CMakeLists加入这两个链接

    修改CMakeLists.txt输入下:

    cmake_minimum_required(VERSION 2.8)
    project(DBoW2)

    IF(WIN32)
    SET (DBoW2_LIB_TYPE STATIC)
    ELSE()
    SET (DBoW2_LIB_TYPE SHARED)
    ENDIF(WIN32)

    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3 ")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall  -O3")

    set(HDRS_DBOW2
      DBoW2/BowVector.h
      DBoW2/FORB.h
      DBoW2/FClass.h       
      DBoW2/FeatureVector.h
      DBoW2/ScoringObject.h   
      DBoW2/TemplatedVocabulary.h)
    set(SRCS_DBOW2
      DBoW2/BowVector.cpp
      DBoW2/FORB.cpp      
      DBoW2/FeatureVector.cpp
      DBoW2/ScoringObject.cpp)

    set(HDRS_DUTILS
      DUtils/Random.h
      DUtils/Timestamp.h)
    set(SRCS_DUTILS
      DUtils/Random.cpp
      DUtils/Timestamp.cpp)


    SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../opencv-3.1.0/build/install/sdk/native/jni)

    FIND_PACKAGE(OpenCV QUIET )

    IF(NOT OpenCV_FOUND)

    SET(OpenCV_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/../opencv-3.1.0/build/install/sdk/native/jni/include)
    SET(OpenCV_LIBS ${PROJECT_SOURCE_DIR}/../opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_core.a)

    ENDIF()


    set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

    include_directories(${OpenCV_INCLUDE_DIRS})
    add_library(DBoW2 ${DBoW2_LIB_TYPE} ${SRCS_DBOW2} ${SRCS_DUTILS})

    target_link_libraries(DBoW2 -lz -llog ${OpenCV_LIBS})

    g2o

    clang++: error: the clang compiler does not support '-march=native'
    

     同上修改CMakeLists

    MultiCol-SLAM/ThirdParty/g2o/g2o/types/../core/hyper_graph.h:41:10: fatal error: 'tr1/unordered_map' file not found
    

     不支持android的NDK 中没有tr1目录直接使用unordered_map,代码中有多个tr1的目录都需要修改

    Eigen 3:只是头文件引用

    OpenGV

    clang++: error: the clang compiler does not support '-march=native'
    

      同上修改CMakeLists

    MultiCol-SLAM:

    CMake Error at CMakeLists.txt:43 (find_package):
    

     find opencv package 失败,同上。

    CMake Error in CMakeLists.txt:
      No cmake_minimum_required command is present.  A line of code such as
    

    增加cmake版本信息

    clang++: error: the clang compiler does not support '-march=native'
    

     同上

    MultiCol-SLAM/include/cam_model_omni.h:38:10: fatal error: 'opencv2/opencv.hpp' file not found
    

    CMakeLists.txt 加opencv 头文件目录

    MultiCol-SLAM/include/cMapPublisher.h:36:10: fatal error: 'pangolin/pangolin.h' file not found
    

    因为不需要描画显示,删除使用pangolin 和 cViewer

    In file included from /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/cOptimizerLoopStuff.cpp:27:
    In file included from /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/include/cOptimizer.h:30:
    In file included from /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/include/cMap.h:31:
    In file included from /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/include/cMapPoint.h:31:
    In file included from /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/include/cMultiKeyFrame.h:38:
    In file included from /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/ThirdParty/DBoW2/DBoW2/BowVector.h:14:
    /opt/android-ndk-r21b-linux-x86_64/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/map:910:5: error: static_assert failed due to requirement 'is_same<std::__ndk1::pair<const MultiColSLAM::cMultiKeyFrame *, g2o::Sim3>, std::__ndk1::pair<MultiColSLAM::cMultiKeyFrame *const, g2o::Sim3> >::value' "Allocator::value_type must be same type as value_type"
        static_assert((is_same<typename allocator_type::value_type, value_type>::value),
        ^              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/cOptimizerLoopStuff.cpp:315:18: note: in instantiation of template class 'std::__ndk1::map<MultiColSLAM::cMultiKeyFrame *, g2o::Sim3, std::__ndk1::less<MultiColSLAM::cMultiKeyFrame *>, Eigen::aligned_allocator<std::__ndk1::pair<const MultiColSLAM::cMultiKeyFrame *, g2o::Sim3> > >' requested here
                            cLoopClosing::KeyFrameAndPose::const_iterator it = CorrectedSim3.find(pMKF)

     修改const位置

    		typedef std::map<cMultiKeyFrame*, g2o::Sim3, std::less<cMultiKeyFrame*>,
    			Eigen::aligned_allocator<std::pair<const cMultiKeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
    修改成====================================>
    typedef std::map<cMultiKeyFrame*, g2o::Sim3, std::less<cMultiKeyFrame*>,
    			Eigen::aligned_allocator<std::pair< cMultiKeyFrame* const, g2o::Sim3> > > KeyFrameAndPose;
    
    CMakeFiles/MultiCol-SLAM.dir/src/cam_model_omni.cpp.o: In function `MultiColSLAM::CreateMirrorMask(MultiColSLAM::cCamModelGeneral_, int, std::__ndk1::vector<cv::Mat, std::__ndk1::allocator<cv::Mat> >&)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/cam_model_omni.cpp:191: undefined reference to `cv::buildPyramid(cv::_InputArray const&, cv::_OutputArray const&, int, int)'
    CMakeFiles/MultiCol-SLAM.dir/src/cMultiFramePublisher.cpp.o: In function `MultiColSLAM::cMultiFramePublisher::DrawMultiFrame(std::__ndk1::vector<cv::Mat, std::__ndk1::allocator<cv::Mat> >&)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/cMultiFramePublisher.cpp:120: undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)'
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/cMultiFramePublisher.cpp:131: undefined reference to `cv::line(cv::_InputOutputArray const&, cv::Point_<int>, cv::Point_<int>, cv::Scalar_<double> const&, int, int, int)'
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/cMultiFramePublisher.cpp:154: undefined reference to `cv::rectangle(cv::_InputOutputArray const&, cv::Point_<int>, cv::Point_<int>, cv::Scalar_<double> const&, int, int, int)'
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/cMultiFramePublisher.cpp:155: undefined reference to `cv::circle(cv::_InputOutputArray const&, cv::Point_<int>, int, cv::Scalar_<double> const&, int, int, int)'
    CMakeFiles/MultiCol-SLAM.dir/src/cMultiFramePublisher.cpp.o: In function `MultiColSLAM::cMultiFramePublisher::DrawTextInfo(cv::Mat&, int, cv::Mat&)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/cMultiFramePublisher.cpp:207: undefined reference to `cv::getTextSize(cv::String const&, int, double, int, int*)'
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/cMultiFramePublisher.cpp:212: undefined reference to `cv::putText(cv::_InputOutputArray const&, cv::String const&, cv::Point_<int>, int, double, cv::Scalar_<double>, int, int, bool)'
    CMakeFiles/MultiCol-SLAM.dir/src/cSim3Solver.cpp.o: In function `MultiColSLAM::cSim3Solver::computeT(cv::Matx<double, 3, 3>&, cv::Matx<double, 3, 3>&)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/cSim3Solver.cpp:339: undefined reference to `cv::Rodrigues(cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&)'
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/cSim3Solver.cpp:349: undefined reference to `cv::pow(cv::_InputArray const&, double, cv::_OutputArray const&)'
    CMakeFiles/MultiCol-SLAM.dir/src/mdBRIEFextractorOct.cpp.o: In function `MultiColSLAM::mdBRIEFextractorOct::ComputeKeyPointsOctTree(std::__ndk1::vector<std::__ndk1::vector<cv::KeyPoint, std::__ndk1::allocator<cv::KeyPoint> >, std::__ndk1::allocator<std::__ndk1::vector<cv::KeyPoint, std::__ndk1::allocator<cv::KeyPoint> > > >&)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/mdBRIEFextractorOct.cpp:870: undefined reference to `cv::AgastFeatureDetector::create(int, bool, int)'
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/mdBRIEFextractorOct.cpp:872: undefined reference to `cv::FastFeatureDetector::create(int, bool, int)'
    CMakeFiles/MultiCol-SLAM.dir/src/mdBRIEFextractorOct.cpp.o: In function `MultiColSLAM::IC_Angle(cv::Mat const&, cv::Point_<float>, std::__ndk1::vector<int, std::__ndk1::allocator<int> > const&)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/mdBRIEFextractorOct.cpp:247: undefined reference to `cv::fastAtan2(float, float)'
    CMakeFiles/MultiCol-SLAM.dir/src/mdBRIEFextractorOct.cpp.o: In function `MultiColSLAM::mdBRIEFextractorOct::ComputeKeyPointsOld(std::__ndk1::vector<std::__ndk1::vector<cv::KeyPoint, std::__ndk1::allocator<cv::KeyPoint> >, std::__ndk1::allocator<std::__ndk1::vector<cv::KeyPoint, std::__ndk1::allocator<cv::KeyPoint> > > >&)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/mdBRIEFextractorOct.cpp:1059: undefined reference to `cv::FAST(cv::_InputArray const&, std::__ndk1::vector<cv::KeyPoint, std::__ndk1::allocator<cv::KeyPoint> >&, int, bool)'
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/mdBRIEFextractorOct.cpp:1065: undefined reference to `cv::FAST(cv::_InputArray const&, std::__ndk1::vector<cv::KeyPoint, std::__ndk1::allocator<cv::KeyPoint> >&, int, bool)'
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/mdBRIEFextractorOct.cpp:1130: undefined reference to `cv::KeyPointsFilter::retainBest(std::__ndk1::vector<cv::KeyPoint, std::__ndk1::allocator<cv::KeyPoint> >&, int)'
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/mdBRIEFextractorOct.cpp:1148: undefined reference to `cv::KeyPointsFilter::retainBest(std::__ndk1::vector<cv::KeyPoint, std::__ndk1::allocator<cv::KeyPoint> >&, int)'
    CMakeFiles/MultiCol-SLAM.dir/src/mdBRIEFextractorOct.cpp.o: In function `MultiColSLAM::mdBRIEFextractorOct::ComputePyramid(cv::Mat, cv::Mat)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/mdBRIEFextractorOct.cpp:1179: undefined reference to `cv::resize(cv::_InputArray const&, cv::_OutputArray const&, cv::Size_<int>, double, double, int)'
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/mdBRIEFextractorOct.cpp:1182: undefined reference to `cv::resize(cv::_InputArray const&, cv::_OutputArray const&, cv::Size_<int>, double, double, int)'
    CMakeFiles/MultiCol-SLAM.dir/src/mdBRIEFextractorOct.cpp.o: In function `MultiColSLAM::mdBRIEFextractorOct::operator()(cv::_InputArray const&, cv::_InputArray const&, std::__ndk1::vector<cv::KeyPoint, std::__ndk1::allocator<cv::KeyPoint> >&, MultiColSLAM::cCamModelGeneral_&, cv::_OutputArray const&, cv::_OutputArray const&)':
    /home/yangtze/SLAM/MultiColBase/MultiCol-SLAM/src/mdBRIEFextractorOct.cpp:1301: undefined reference to `cv::boxFilter(cv::_InputArray const&, cv::_OutputArray const&, int, cv::Size_<int>, cv::Point_<int>, bool, int)'
    

     链接错误,大部分的opencv库都是用了,所以需要把所有opencv 和opencv的第三方库都加进来,由于链接是用顺序的,依赖库放在后面,如opencv_highgui依赖 opencv_imgproc 依赖opencv_core,被依赖库 opencv_core放在最后。

    CMakeLists.txt如下:

    # This file is part of MultiCol-SLAM
    #
    # Copyright (C) 2015-2016 Steffen Urban <rurbste at googlemail.com>
    # For more information see <https://github.com/urbste/MultiCol-SLAM>
    #
    # MultiCol-SLAM is free software: you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # MultiCol-SLAM is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with MultiCol-SLAM . If not, see <http://www.gnu.org/licenses/>.
    cmake_minimum_required(VERSION 2.8)
    
    project (MultiCol-SLAM)
    
    IF(NOT CMAKE_BUILD_TYPE)
      SET(CMAKE_BUILD_TYPE Release)
    ENDIF()
    
    if (WIN32)
    SET (MCSSLAM_LIB_TYPE )
    else()
    SET (MCSSLAM_LIB_TYPE SHARED)
    endif(WIN32)
    
    MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})
    
    IF(WIN32)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -openmp -W0 -MP")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -openmp -W0 -MP")
    ELSE()
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp -O3 -std=c++11")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -O3  -std=c++11")
    
    MESSAGE("${CMAKE_CXX_FLAGS}")
    ENDIF()
    
    LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
    
    SET(OpenCV_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/jni/include)
    SET(OpenCV_LIBS 
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_calib3d.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_features2d.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_flann.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_highgui.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_imgcodecs.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_imgproc.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_core.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_ml.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_objdetect.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_photo.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_shape.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_stitching.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_ts.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_photo.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_video.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_videoio.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/libs/arm64-v8a/libopencv_videostab.a)
    
    
    SET(OpenCV_LIBS_THIRD
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/3rdparty/libs/arm64-v8a/libIlmImf.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/3rdparty/libs/arm64-v8a/liblibjasper.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/3rdparty/libs/arm64-v8a/liblibjpeg.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/3rdparty/libs/arm64-v8a/liblibpng.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/3rdparty/libs/arm64-v8a/liblibtiff.a
    ${PROJECT_SOURCE_DIR}/ThirdParty/opencv-3.1.0/build/install/sdk/native/3rdparty/libs/arm64-v8a/liblibwebp.a)
    
    # ==============================================================================
    # Search OpenGV
    # ============================================================================== 
    #FIND_PACKAGE(OpenGV QUIET HINTS ${OpenGV_DIR_HINTS})
    #IF(NOT OpenGV_FOUND)
    SET(OpenGV_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/ThirdParty/OpenGV/include)
    SET(OpenGV_LIBRARIES opengv)
    MESSAGE("OpenGV include DIR ${OpenGV_INCLUDE_DIR}")
    INCLUDE_DIRECTORIES(${OpenGV_INCLUDE_DIR})
    #ENDIF()
    
    # ==============================================================================
    # Search g2o includes
    # ============================================================================== 
    #FIND_PACKAGE(g2o QUIET HINTS ${g2o_DIR_HINTS})
    #IF(NOT g2o_FOUND)
    SET(g2o_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/ThirdParty/g2o)
    SET(g2o_LIBRARIES g2o)
    MESSAGE("g2o include DIR ${g2o_INCLUDE_DIR}")
    INCLUDE_DIRECTORIES(${g2o_INCLUDE_DIR})
    #ENDIF()
    
    # ==============================================================================
    # Search Eigen, borrowed from openMVG
    # this makes it a lot smoother for Windows
    # ==============================================================================
    # - internal by default, (Eigen version 3.2.9)
    # - external if EIGEN_INCLUDE_DIR_HINTS is defined
    # ============================================================================== 
    IF(NOT DEFINED EIGEN_INCLUDE_DIR_HINTS)
      SET(EIGEN_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/ThirdParty/Eigen)
      MESSAGE("Eigen include DIR ${EIGEN_INCLUDE_DIR}")
      #SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/ThirdParty/Eigen/cmake)
      #FIND_PACKAGE(Eigen3 REQUIRED)
      #MESSAGE("-- Eigen version ${EIGEN3_VERSION}: ${EIGEN3_INCLUDE_DIR}")
      #INCLUDE_DIRECTORIES(${EIGEN3_INCLUDE_DIR})
      SET(MultiCol-SLAM_USE_INTERNAL_EIGEN ON)
      INCLUDE_DIRECTORIES(${EIGEN_INCLUDE_DIR})
    ENDIF()
    
    
    SET(MultiColHeaders
    include/cam_model_omni.h
    include/cam_system_omni.h
    include/cConverter.h
    include/cMultiFrame.h
    include/cMultiFramePublisher.h
    include/cMultiKeyFrame.h
    include/cConverter.h
    include/cMapPoint.h
    include/cMap.h
    include/cMapPublisher.h
    include/cLocalMapping.h
    include/cLoopClosing.h
    include/cOptimizer.h
    include/cORBVocabulary.h
    include/cORBmatcher.h
    include/cMultiFrame.h
    include/cMultiKeyFrameDatabase.h
    include/cSim3Solver.h
    include/cSystem.h
    include/cTracking.h
    include/cMultiInitializer.h
    #include/cViewer.h
    include/mdBRIEFextractorOct.h
    include/misc.h
    #include/MultiCol_cayley_jacobians.h
    include/g2o_MultiCol_vertices_edges.h
    include/g2o_MultiCol_sim3_expmap.h
    )
    
    include_directories(
    ${PROJECT_SOURCE_DIR}
    ${PROJECT_SOURCE_DIR}/include
    ${PROJECT_SOURCE_DIR}/ThirdParty
    ${PROJECT_SOURCE_DIR}/ThirdParty/g2o
    ${OpenCV_INCLUDE_DIRS}
    )
    
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
    
    add_library(${PROJECT_NAME} ${MCSSLAM_LIB_TYPE}
    src/cam_model_omni.cpp
    src/cam_system_omni.cpp
    src/cConverter.cpp
    src/cMultiFrame.cpp
    src/cMultiFramePublisher.cpp
    src/cMultiKeyFrame.cpp
    src/cConverter.cpp
    src/cMapPoint.cpp
    src/cMap.cpp
    src/cMapPublisher.cpp
    src/cOptimizer.cpp
    src/cOptimizerLoopStuff.cpp
    src/cMultiFrame.cpp
    src/cMultiKeyFrameDatabase.cpp
    src/cSim3Solver.cpp
    src/cSystem.cpp
    src/cMultiInitializer.cpp
    src/mdBRIEFextractorOct.cpp
    src/cTracking.cpp
    src/cLocalMapping.cpp
    src/cLoopClosing.cpp
    #src/cViewer.cpp
    src/cORBmatcher.cpp
    src/g2o_MultiCol_sim3_expmap.cpp
    src/g2o_MultiCol_vertices_edges.cpp
    src/misc.cpp
    ${MultiColHeaders}
    )
    
    IF(WIN32)
    SET (G2OLIBS_DEBUG ${PROJECT_SOURCE_DIR}/Thirdparty/g2o/bin/Debug/g2o.lib)
    SET (DBOW2LIBS_DEBUG  ${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/Debug/DBoW2.lib)
    SET (OPENGVLIBS_DEBUG  ${PROJECT_SOURCE_DIR}/ThirdParty/OpenGV/build/lib/Debug/opengv.lib) 
    SET (RANDOMGENLIBS_DEBUG ${PROJECT_SOURCE_DIR}/ThirdParty/OpenGV/build/lib/Debug/random_generators.lib)
        
    SET (G2OLIBS ${PROJECT_SOURCE_DIR}/Thirdparty/g2o/bin/Release/g2o.lib)
    SET (DBOW2LIBS ${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/Release/DBoW2.lib)
    SET (OPENGVLIBS ${PROJECT_SOURCE_DIR}/ThirdParty/OpenGV/build/lib/Release/opengv.lib) 
    SET (RANDOMGENLIBS ${PROJECT_SOURCE_DIR}/ThirdParty/OpenGV/build/lib/Release/random_generators.lib)
    ELSE()
    SET (G2OLIBS ${PROJECT_SOURCE_DIR}/ThirdParty/g2o/lib/libg2o.so)
    SET (DBOW2LIBS ${PROJECT_SOURCE_DIR}/ThirdParty/DBoW2/lib/libDBoW2.so)
    SET (OPENGVLIBS ${PROJECT_SOURCE_DIR}/ThirdParty/OpenGV/build/lib/librandom_generators.a
                    ${PROJECT_SOURCE_DIR}/ThirdParty/OpenGV/build/lib/libopengv.a)
    ENDIF()
    
    IF(WIN32)
    target_link_libraries(${PROJECT_NAME}
    ${OpenCV_LIBS}
    ${Pangolin_LIBRARIES}
    optimized ${G2OLIBS}
    optimized ${DBOW2LIBS}
    optimized ${OPENGVLIBS}
    optimized ${RANDOMGENLIBS}
    debug ${G2OLIBS_DEBUG}
    debug ${DBOW2LIBS_DEBUG}
    debug ${OPENGVLIBS_DEBUG}
    debug ${RANDOMGENLIBS_DEBUG})
    ELSE()
    target_link_libraries(${PROJECT_NAME}
    -lz -llog
    ${OpenCV_LIBS}
    ${OpenCV_LIBS_THIRD}
    ${Pangolin_LIBRARIES}
    ${G2OLIBS}
    ${DBOW2LIBS}
    ${OPENGVLIBS}
    ${RANDOMGENLIBS})
    ENDIF()
    
    # Build examples
    MESSAGE("${PROJECT_NAME}")
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Lafida)
    add_executable(multi_col_slam_lafida Examples/Lafida/mult_col_slam_lafida.cpp)
    target_link_libraries(multi_col_slam_lafida ${PROJECT_NAME})
    

    openmp:

    在执行时,找不到openmp链接,下载对应版本的src编译,我用的是android 9.0 所以使用如下链接下载源码:https://releases.llvm.org/9.0.0/openmp-9.0.0.src.tar.xz

  • 相关阅读:
    (考研)散列表和hashcode和hashmap
    java基本数据类型和引用类型
    Java 中的语法糖(7/15整个周六上午总结)
    数据库第一天-数据库索引
    MonoBehaviour生命周期
    Unity基础知识
    SQLite3笔记
    cocos_js写文件
    UGUI_屏幕适配
    KMS算法
  • 原文地址:https://www.cnblogs.com/yueyangtze/p/14006449.html
Copyright © 2011-2022 走看看