Life sucks, but you're gonna love it.

0%

Mac使用brew在vscode下安装并配置【opencv】【g2o】【sophus】

环境: Mac os linux

编译器:vscode

管理包:brew

安装包:

  • opencv
  • eigen
  • g2o
  • sophus

主要步骤

  1. opencv

    1
    2
    3
    4
    5
    6
    brew search opencv #可以搜索brew可以安装的opencv的version

    brew install opencv@2 #选择要安装的opencv

    brew info opencv #检查安装结果,若某个依赖包的后面没有✅,可以直接brew install安装这个包

    • 安装完成之后会出现以下的提示,记得需要分别执行,这样可以把opencv的头文件和lib放到相应的位置以便随后配置

      If you need to have opencv@2 first in your PATH run:
      echo ‘export PATH=”/usr/local/opt/opencv@2/bin:$PATH”‘ >> ~/.zshrc

      For compilers to find opencv@2 you may need to set:
      export LDFLAGS=”-L/usr/local/opt/opencv@2/lib”
      export CPPFLAGS=”-I/usr/local/opt/opencv@2/include”

      For pkg-config to find opencv@2 you may need to set:
      export PKG_CONFIG_PATH=”/usr/local/opt/opencv@2/lib/pkgconfig”

    • opencv@2 和 opencv@3有一些包有区别,所以有时候编译找不到其中一个包可以看一下版本是否有误

    这样安装好的opencv的include的内容是在 /usr/local/opt/opencv@2/include

    而link library是在当前文件夹 /usr/local/opt/opencv@2/lib

  2. eigen

    1
    2
    brew install eigen

    这样安装好的opencv的include的内容是在 /usr/local/opt/eigen/include

    而link library是在当前文件夹 /usr/local/opt/eigen/lib

  3. Sophus

    https://github.com/strasdat/Sophus

    Sophus 是 应用在二维和三维问题中的李群方法的一个包,可以直接git clone下载然后按照网页提示步骤安装。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    git clone https://github.com/strasdat/Sophus.git #下载包到本地

    cd Sophus #打开文件夹

    mkdir build #创建build文件夹用于存放makefile

    cmake .. #cmake上级的 cmakelist.txt

    make #运行上一步在build文件夹中生成的makefile

    sudo install make #在 /usr/local/include 中安装sophus的头文件之类的文件

    这样安装好的sophus的include的内容是在 /usr/local/include/sophus

    而link library是在当前文件夹 ../sophus (就一个lib文件)

    • cmake .. 这一步下,可能会出现以下错误:

      1
      2
      3
      /Users/wangcaimeng/Sophus/sophus/so2.cpp:32:24: error: expression is not assignable unit_complex_.real() = 1.;
      /Users/wangcaimeng/Sophus/sophus/so2.cpp:33:24: error: expression is not assignable unit_complex_.imag() = 0.;
      ~~~~~~~~~~~~~~~~~~~~ ^ 2 errors generated. make[2]: *** [CMakeFiles/Sophus.dir/sophus/so2.cpp.o] Error 1 make[1]: *** [CMakeFiles/Sophus.dir/all] Error 2 make: *** [all] Error 2

      解决方案是:

      1
      2
      3
      4
      5
      将 so2.cpp 文件的32和33行改为:

      unit_complex_.real(1.);
      unit_complex_.imag(0.);
      参考自:https://github.com/gaoxiang12/slambook/issues/56#issuecomment-334946067
  4. g2o

    https://github.com/RainerKuemmerle/g2o

    g2o是brewsci中的一个用于非线性优化的包,在官方git的readme.md文件中,提及到macos系统可以直接用

    1
    brew install brewsci/science/g2o

    来安装相关的包,但是我在安装的的过程中会涉及到 Cannot tap brewsci/science 的报错信息,这个问题没有查到明确的解法,所以就按照 sophus相同的办法安装了g2o。在官方的g2o文件的Compilation 部分也有具体提到安装的步骤:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    git clone https://github.com/RainerKuemmerle/g2o.git

    cd g2o

    mkdir build

    cmake ..

    make

    sudo install make #在 /usr/local/include 中安装g2o的头文件之类的文件

    这样安装好的g2o的include的内容是在 /usr/local/include/g2o

    而link library是在当前文件夹 ../g2o/lib

由此可得,基于brew install 安装的包都比较统一地把include文件和lib文件放在 /usr/local/opt/opencv@2/include/usr/local/opt/opencv@2/lib中,但是直接从git下载并且需要cmake的包需要自行确定include和lib文件夹在哪里。

如果在安装过后都使用了 sudo install make 那么include的包会被安装在 /usr/local/include/

vscode 配置

vscode的配置文件又四个,分别是: launch.json, tasks.json, settngs.json, c_cpp_properties.json

  1. lauch.json

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    {
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    {
    "name": "(lldb) Launch",
    "type": "cppdbg",
    "request": "launch",
    "program": "${fileDirname}/a.out",
    "args": [],
    "stopAtEntry": true,
    "cwd": "${workspaceFolder}",
    "environment": [],
    "externalConsole": false,
    "MIMode": "lldb"
    }
    ]
    }
  2. settings.json

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //settings.json
    {
    "python.pythonPath": "usr/bin/python",
    "code-runner.executorMap": {
    "c": "cd $dir && make && ./$fileNameWithoutExt && make clean",
    "cpp": "cd $dir && make && ./$fileNameWithoutExt && make clean"
    },
    "editor.renderWhitespace": "all",
    "editor.renderLineHighlight": "all",
    "editor.formatOnSave": true,
    "code-runner.runInTerminal": true,
    "code-runner.ignoreSelection": true,
    "code-runner.enableAppInsights": false,
    "C_Cpp.updateChannel": "Insiders",
    "[makefile]": {
    "editor.insertSpaces": true
    },
    "C_Cpp.default.includePath": [
    "/usr/local/Cellar/opencv@2/2.4.13.7_11/include"
    ]
    }
  3. tasks.json

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    {
    "tasks": [
    {
    "type": "shell",
    "label": "Build",
    "command": "g++",
    "args": [
    //"main.cpp",
    "${file}",
    "-o",
    "${fileDirname}/${fileBasenameNoExtension}.out",
    "-I",
    "/usr/local/Cellar/opencv@2/2.4.13.7_11/include/opencv",
    "-I",
    "/usr/local/Cellar/opencv@2/2.4.13.7_11/include",
    "-L",
    "/usr/local/Cellar/opencv@2/2.4.13.7_11/lib",
    "-l",
    "opencv_stitching",
    "-l",
    "opencv_superres",
    "-l",
    "opencv_videostab",
    "-l",
    "opencv_aruco",
    "-l",
    "opencv_bgsegm",
    "-l",
    "opencv_bioinspired",
    "-l",
    "opencv_ccalib",
    "-l",
    "opencv_dnn_objdetect",
    "-l",
    "opencv_dpm",
    "-l",
    "opencv_face",
    "-l",
    "opencv_fuzzy",
    "-l",
    "opencv_hfs",
    "-l",
    "opencv_img_hash",
    "-l",
    "opencv_line_descriptor",
    "-l",
    "opencv_optflow",
    "-l",
    "opencv_reg",
    "-l",
    "opencv_rgbd",
    "-l",
    "opencv_saliency",
    "-l",
    "opencv_stereo",
    "-l",
    "opencv_structured_light",
    "-l",
    "opencv_phase_unwrapping",
    "-l",
    "opencv_surface_matching",
    "-l",
    "opencv_tracking",
    "-l",
    "opencv_datasets",
    "-l",
    "opencv_dnn",
    "-l",
    "opencv_plot",
    "-l",
    "opencv_xfeatures2d",
    "-l",
    "opencv_shape",
    "-l",
    "opencv_video",
    "-l",
    "opencv_ml",
    "-l",
    "opencv_ximgproc",
    "-l",
    "opencv_xobjdetect",
    "-l",
    "opencv_objdetect",
    "-l",
    "opencv_calib3d",
    "-l",
    "opencv_features2d",
    "-l",
    "opencv_highgui",
    "-l",
    "opencv_videoio",
    "-l",
    "opencv_imgcodecs",
    "-l",
    "opencv_flann",
    "-l",
    "opencv_xphoto",
    "-l",
    "opencv_photo",
    "-l",
    "opencv_imgproc",
    "-l",
    "opencv_core",
    "-g"

    ],

    "group": {
    "kind": "build",
    "isDefault": true
    },
    "problemMatcher": [
    "$gcc"
    ]
    }
    ],
    "version": "2.0.0"
    }
  4. c_cpp_properties.json

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    {
    "configurations": [
    {
    "name": "Mac",
    "includePath": [
    "${workspaceFolder}/**",
    "/usr/local/opt/opencv@2/include",
    "/usr/local/Cellar/opencv@2/2.4.13.7_11/include"
    ],
    "defines": [],
    "macFrameworkPath": [],
    "compilerPath": "/usr/bin/g++",
    "cStandard": "c11",
    "cppStandard": "c++11",
    "intelliSenseMode": "clang-x64",
    "browse": {
    "path": [
    "/usr/local/Cellar/opencv@2/2.4.13.7_11/include"
    ],
    "limitSymbolsToIncludedHeaders": true,
    "databaseFilename": ""
    }
    }
    ],
    "version": 4
    }

cmakelist 配置

cmake中主要配置的是 INCLUDE_DIRECTORIES , link_directoryies

注意着两部分的路径药分别和之前安装的不同的包的路径相匹配,这样就可以运行cmake进行编译了