You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Travis-CI Ubuntu环境下CMake与g++编译C++17代码报错求助

Travis-CI Ubuntu环境下CMake与g++编译异常问题

编译失败时出现以下错误:

In file included from /usr/include/c++/10/cinttypes:35,
                 from /home/travis/build/quicky2000/repositories/edge_matching_puzzle/include/light_border_pieces_db.h:21,
                 from /home/travis/build/quicky2000/repositories/edge_matching_puzzle/src/border_backtracker.cpp:19:
/usr/include/c++/10/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
   32 | #error This file requires compiler and library support \
      |  ^~~~~
In file included from /home/travis/build/quicky2000/repositories/edge_matching_puzzle/src/border_backtracker.cpp:19:
/home/travis/build/quicky2000/repositories/edge_matching_puzzle/include/light_border_pieces_db.h:48:7: error: ‘uint32_t’ has not been declared
   48 |       uint32_t p_left_color,

当前编译参数存在矛盾:使用g++ 10.5.0时CMake生成的命令行带有-std=c++17;使用g++ 7.5.0时带有-std=c++1z,理论上这两个标准都完全兼容C11,且代码中已包含cinttypes头文件(会自动引入cstdint),uint32_t的声明应该可见,但g似乎完全忽略了指定的-std参数。

完整编译命令如下:

/usr/bin/g++ -DEDGE_MATCHING_PUZZLE_SELF_TEST \
 -I/home/travis/build/quicky2000/repositories/edge_matching_puzzle/include \
 -I/home/travis/build/quicky2000/repositories/quicky_exception/include \
 -I/home/travis/build/quicky2000/repositories/quicky_utils/include \
 -I/home/travis/build/quicky2000/repositories/simple_gui/include \
 -I/usr/include/SDL \
 -I/home/travis/build/quicky2000/repositories/lib_bmp/include\
 -I/home/travis/build/quicky2000/repositories/FSM_base/include \
 -I/home/travis/build/quicky2000/repositories/FSM_interfaces/include \
 -I/home/travis/build/quicky2000/repositories/FSM_framework/include \
 -I/home/travis/build/quicky2000/repositories/parameter_manager/include \
 -I/home/travis/build/quicky2000/repositories/combinatorics/include \
 -I/home/travis/build/quicky2000/repositories/simplex/include\
 -I/home/travis/build/quicky2000/repositories/my_cuda/include\
 -I/home/travis/build/quicky2000/repositories/EXT_xmlParser/include\
 -std=c++1z -Wall -ansi -pedantic -MD\
 -MT CMakeFiles/edge_matching_puzzle.dir/src/border_backtracker.cpp.o -MF CMakeFiles/edge_matching_puzzle.dir/src/border_backtracker.cpp.o.d\
 -o CMakeFiles/edge_matching_puzzle.dir/src/border_backtracker.cpp.o\
 -c /home/travis/build/quicky2000/repositories/edge_matching_puzzle/src/border_backtracker.cpp

排查过程

  • 最初怀疑CMake未使用正确编译器,因日志中有如下内容:
-- The CXX compiler identification is GNU 10.5.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- The C compiler identification is GNU 10.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done

但经确认,"skipped"并非问题所在。

  • g安装无异常:通过以下命令安装g-10,且使用自定义Makefile编译时完全正常:
sudo apt-get -y install g++-10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10
sudo update-alternatives --set gcc /usr/bin/gcc-10

环境变更情况

  • 4个月前使用g++ 10.3.0时可正常构建,唯一变化是apt升级后g++版本升至10.5.0;
  • 在默认gcc为7.5.0的旧版Travis Ubuntu环境中,同样出现该问题,且该版本gcc未进行过变更。

内容的提问来源于stack exchange,提问作者Quicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:58:13