【求助】Github开源的项目无法通过make

不同视角、不同观点、深度探讨,禁止人品和道德攻击
回复
Mr_Benson
帖子: 1
注册时间: 2023-08-19 19:52
系统: Ubuntu 18.04

【求助】Github开源的项目无法通过make

#1

帖子 Mr_Benson » 2023-08-19 19:57

项目地址:https://github.com/koide3/iridescence
问题描述:
pi@pi-virtual-machine:~/iridescence/build$ make -j
[ 20%] Built target gl_imgui
[ 21%] Building CXX object CMakeFiles/iridescence.dir/src/glk/glsl_shader.cpp.o
[ 23%] Building CXX object CMakeFiles/iridescence.dir/src/glk/effects/screen_space_attribute_estimation.cpp.o
[ 24%] Building CXX object CMakeFiles/iridescence.dir/src/glk/effects/囗囗囗囗囗_screen_space_ambient_occlusion.cpp.o
[ 26%] Building CXX object CMakeFiles/iridescence.dir/src/guik/gl_canvas.cpp.o
[ 27%] Building CXX object CMakeFiles/iridescence.dir/src/guik/model_control.cpp.o
[ 30%] Building CXX object CMakeFiles/iridescence.dir/src/guik/hovered_primitives.cpp.o
[ 30%] Building CXX object CMakeFiles/iridescence.dir/src/guik/hovered_drawings.cpp.o
[ 31%] Building CXX object CMakeFiles/iridescence.dir/src/guik/imgui_application.cpp.o
[ 32%] Building CXX object CMakeFiles/iridescence.dir/src/guik/camera/orbit_camera_control_xy.cpp.o
[ 34%] Building CXX object CMakeFiles/iridescence.dir/src/guik/camera/static_camera_control.cpp.o
[ 35%] Building CXX object CMakeFiles/iridescence.dir/src/guik/camera/orbit_camera_control_xz.cpp.o
[ 36%] Building CXX object CMakeFiles/iridescence.dir/src/guik/recent_files.cpp.o
[ 38%] Building CXX object CMakeFiles/iridescence.dir/src/guik/camera/projection_control.cpp.o
[ 39%] Building CXX object CMakeFiles/iridescence.dir/src/guik/camera/camera_control.cpp.o
[ 41%] Building CXX object CMakeFiles/iridescence.dir/src/guik/viewer/viewer_ui.cpp.o
[ 42%] Building CXX object CMakeFiles/iridescence.dir/src/guik/camera/basic_projection_control.cpp.o
[ 43%] Building CXX object CMakeFiles/iridescence.dir/src/guik/camera/topdown_camera_control.cpp.o
[ 45%] Building CXX object CMakeFiles/iridescence.dir/src/guik/viewer/light_viewer.cpp.o
[ 52%] Building CXX object CMakeFiles/iridescence.dir/src/guik/camera/arcball_camera_control.cpp.o
[ 46%] Building CXX object CMakeFiles/iridescence.dir/src/glk/io/mesh_io.cpp.o
[ 47%] Building CXX object CMakeFiles/iridescence.dir/src/guik/viewer/light_viewer_context.cpp.o
[ 49%] Building CXX object CMakeFiles/iridescence.dir/src/guik/viewer/anonymous.cpp.o
[ 50%] Building CXX object CMakeFiles/iridescence.dir/src/guik/viewer/light_viewer_context_util.cpp.o
[ 53%] Building CXX object CMakeFiles/iridescence.dir/src/guik/viewer/info_window.cpp.o
/home/pi/iridescence/src/glk/glsl_shader.cpp: In member function ‘GLuint glk::GLSLShader::read_shader_from_file(const string&, const std::unordered_map<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >&, const string&, GLuint)’:
/home/pi/iridescence/src/glk/glsl_shader.cpp:289:36: error: cannot bind non-const lvalue reference of type ‘std::__cxx11::basic_string<char>&’ to an rvalue of type ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’
boost::split(error_lines, std::string(error_message.begin(), error_message.end()), boost::is_any_of("\n"));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/boost/algorithm/string.hpp:23:0,
from /home/pi/iridescence/src/glk/glsl_shader.cpp:15:
/usr/include/boost/algorithm/string/split.hpp:140:35: note: initializing argument 2 of ‘SequenceSequenceT& boost::algorithm::split(SequenceSequenceT&, RangeT&, PredicateT, boost::algorithm::token_compress_mode_type) [with SequenceSequenceT = std::vector<std::__cxx11::basic_string<char> >; RangeT = std::__cxx11::basic_string<char>; PredicateT = boost::algorithm::detail::is_any_ofF<char>]’
inline SequenceSequenceT& split(
^~~~~
CMakeFiles/iridescence.dir/build.make:270: recipe for target 'CMakeFiles/iridescence.dir/src/glk/glsl_shader.cpp.o' failed
make[2]: *** [CMakeFiles/iridescence.dir/src/glk/glsl_shader.cpp.o] Error 1
make[2]: *** 正在等待未完成的任务....
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/iridescence.dir/all' failed
make[1]: *** [CMakeFiles/iridescence.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

----------------------------------------------------------------------------------------------------------------------------

我跟着官方的教程走make总失败,我尝试更换cmake版本也不行(3.26和3.11),都是同一个错误,求助!
头像
qy117121
论坛版主
帖子: 50546
注册时间: 2007-12-14 13:40
系统: Winbuntu
来自: 志虚国乌由市
联系:

Re: 【求助】Github开源的项目无法通过make

#2

帖子 qy117121 » 2023-08-19 20:45

按他的说明安装依赖了吗? 22.04按说明来make 没出错
渠月 · QY   
本人只会灌水,不负责回答问题
无聊可以点一下→ http://u.nu/ubuntu

Ubuntu 20.04 快速设置指南,请配合浏浏览器自动翻译使用

邮箱 chuan@ubuntu.org.cn
头像
astolia
论坛版主
帖子: 6445
注册时间: 2008-09-18 13:11

Re: 【求助】Github开源的项目无法通过make

#3

帖子 astolia » 2023-08-20 11:22

这个项目在今年初取消了对18.04的自动化测试,可以认为是不再考虑支持18.04了 https://github.com/koide3/iridescence/pull/38 ,出问题的代码是在今年4月时添加的 https://github.com/koide3/iridescence/c ... 1a79cf445d
18.04的5年标准支持周期已经在今年5月底结束了,除非是跑在服务器上的系统,否则都应该考虑升级了。

回到你这个具体的错误,原因如这里所说,不能将std::string创建的临时右值作为boost::split的第二个参数RangeT&,因为RangeT&是个左值引用

代码: 全选

error: cannot bind non-const lvalue reference of type ‘std::__cxx11::basic_string<char>&’ to an rvalue of type ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’
boost::split(error_lines, std::string(error_message.begin(), error_message.end()), boost::is_any_of("\n"));
要到20.04里的boost库1.71版才允许boost::split接受右值,所以你在18.04里会出错。如果懂c++的话,自己修改一下代码,用个变量转换成个左值就可以了,大约是这样

代码: 全选

auto s = std::string(error_message.begin(), error_message.end());
boost::split(error_lines, s, boost::is_any_of("\n"));
回复