环境: Mac os linux
编译器:vscode
管理包:brew
安装包:
- opencv
- eigen
- g2o
- sophus
主要步骤
opencv
1
2
3
4
5
6brew 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”‘ >> ~/.zshrcFor 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
eigen
1
2brew install eigen
这样安装好的opencv的include的内容是在
/usr/local/opt/eigen/include
而link library是在当前文件夹
/usr/local/opt/eigen/lib
Sophus
https://github.com/strasdat/Sophus
Sophus 是 应用在二维和三维问题中的李群方法的一个包,可以直接git clone下载然后按照网页提示步骤安装。
1
2
3
4
5
6
7
8
9
10
11git 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
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
11git 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
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"
}
]
}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"
]
}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"
}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进行编译了