Ubuntu环境编译Blender遇类型转换错误求助(49%失败)
Blender Ubuntu编译报错(49%进度)
问题背景
按照Blender官方Ubuntu编译指南操作,编译到49%时失败,已更新Python和gcc,作为Ubuntu新手寻求解决办法。
错误日志
/home/istmadmin/blender-git/blender/source/blender/blenlib/intern/index_mask.cc: In function ‘void blender::index_mask::inverted_indices_to_segments(blender::index_mask::IndexMaskSegment, blender::LinearAllocator<>&, blender::Vector<blender::OffsetSpan<long int, short int>, 16>&)’: /home/istmadmin/blender-git/blender/source/blender/blenlib/intern/index_mask.cc:384:60: error: conversion from ‘int’ to ‘int16_t’ {aka ‘short int’} may change value [-Werror=conversion] 384 | const int16_t gap_first = indices[size_before_gap - 1] + 1; /home/istmadmin/blender-git/blender/source/blender/blenlib/intern/index_mask.cc:386:35: error: conversion from ‘int’ to ‘int16_t’ {aka ‘short int’} may change value [-Werror=conversion] 386 | const int16_t gap_size = next - gap_first; | ~~^~~~ [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_2_3_4.cc.o At global scope: cc1plus: warning: unrecognized command line option ‘-Wno-stringop-overread’ cc1plus: some warnings being treated as errors make[3]: * [source/blender/blenlib/CMakeFiles/bf_blenlib.dir/build.make:817: source/blender/blenlib/CMakeFiles/bf_blenlib.dir/intern/index_mask.cc.o] Error 1 make[2]: * [CMakeFiles/Makefile2:6442: source/blender/blenlib/CMakeFiles/bf_blenlib.dir/all] Error 2 make[2]: * Waiting for unfinished jobs.... [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_2_3_6.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_2_3_9.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_2_3_d.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_2_4_3.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_2_4_4.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_2_4_6.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_2_4_8.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_2_4_9.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_2_4_d.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_2_d_d.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_3_3_3.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_4_4_2.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_4_4_3.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_4_4_4.cc.o [ 49%] Building CXX object extern/ceres/CMakeFiles/extern_ceres.dir/internal/ceres/generated/schur_eliminator_4_4_d.cc.o [ 49%] Linking CXX static library ../../lib/libextern_ceres.a [ 49%] Built target extern_ceres make[1]: * [Makefile:163: all] Error 2 make: * [GNUmakefile:368: all] Error 2
解决方法
- 临时绕过编译警告:在CMake配置阶段添加参数,关闭类型转换警告作为错误。执行以下命令:
随后重新启动编译:cmake -DCMAKE_CXX_FLAGS="-Wno-error=conversion" ../blendermake -j$(nproc) - 修复源码类型转换:直接修改报错的源码行,添加显式类型转换:
- 打开报错文件:
nano /home/istmadmin/blender-git/blender/source/blender/blenlib/intern/index_mask.cc - 将第384行修改为:
const int16_t gap_first = static_cast<int16_t>(indices[size_before_gap - 1] + 1); - 将第386行修改为:
const int16_t gap_size = static_cast<int16_t>(next - gap_first); - 保存文件后重新编译。
- 打开报错文件:
- 检查gcc版本兼容性:确认gcc版本在Blender官方支持范围内,若当前版本过高,可尝试降级到官方推荐版本(如gcc 11或12)。
内容的提问来源于Stack Exchange,提问作者Samet Kocbay
相关产品推荐
相关产品推荐

