好不容易把kinect sensor sdk和samples sdk安装部署完成,改完点云人脸修复的代码,回来结合这两部分的时候却发现原本能编译的代码现在却报错如下:
/usr/include/c++/7/bits/basic_string.h:6371:14: error: ‘string’ does not name a type; did you mean ‘wstring’?
stoi(const string& __str, size_t* __idx = 0, int __base = 10)
^~~~~~
wstring
/usr/include/c++/7/bits/basic_string.h: In function ‘int std::__cxx11::stoi(const int&, std::size_t*, int)’:
/usr/include/c++/7/bits/basic_string.h:6372:69: error: request for member ‘c_str’ in ‘__str’, which is of non-class type ‘const int’
{ return __gnu_cxx::__stoa<long, int>(&std::strtol, "stoi", __str.c_str(),
发现和我写的代码无关,重新卸载安装g++,gcc后没有改变,最终决定在docker内设置c++编译环境。
之前没用过docker,简单记录下使用经过
1.安装docker
2.搜索镜像:一开始安装的ubuntu18.04的镜像没有cmake,make安装这两个的时候过于麻烦重新找了镜像
docker search ubuntu18.04
不同镜像里面的已安装的应用不太一样,不知道别人是怎么直接找到合适的
docker pull image
创建容器
忘了使用的哪种,老报没有sudo 命令的错误,采用以下命令解决
docker start
docker exec -it -user root container /bin/bash
安装Azure-Kinect-Samples,遇到错误
eula agree question could not be asked
是因为有个图形化的界面需要许可认证,在docker里弹不出来
解决方法:
ubuntu 16.04 - How to accept license agreement during docker build? - Stack Overflow
编译遇到问题:CMakeFiles/simple_3d_viewer.dir/main.cpp.o: In function `PlayFile(InputSettings)':
main.cpp:(.text+0xd72): undefined reference to `k4a_playback_open'
main.cpp:(.text+0xdb9): undefined reference to `k4a_playback_get_calibration'
main.cpp:(.text+0xf2d): undefined reference to `k4a_playback_get_next_capture'
main.cpp:(.text+0x1110): undefined reference to `k4a_playback_close'
解决方法:
在Azure-Kinect-Samples/body-tracking-samples/simple_3d_viewer的CMakelist库中添加k4arecord