MacOS BigSur下编译FlatBuffer v1.3.0至v1.12.1版本flatc编译器报错咨询
结论
你遇到的编译报错和make工具版本无关,不需要更换make版本,问题根源是FlatBuffer v1.12.1及更早版本的代码未兼容MacOS自带的高版本Clang编译器的新语法检查规则,FlatBuffer v2.0.0修复了对应代码问题所以可以正常编译。
报错原因
从报错日志可以看到触发错误的编译参数是-Werror,-Wdeprecated-copy:
- 这个规则是高版本Clang新增的检查:如果C++类自定义了拷贝赋值运算符,就不会隐式生成拷贝构造函数,隐式调用的场景会被判定为问题
- FlatBuffer v1.12.1及更早版本的
TableKeyComparator类只声明了拷贝赋值运算符,没有显式定义拷贝构造函数,触发了该检查,且项目默认开启了-Werror将警告转为编译错误
解决方法
方案一:适配老版本FlatBuffer编译(无需升级版本)
在执行cmake命令时,添加参数关闭对应警告的报错规则即可,完整步骤如下:
- 进入flatbuffers源码目录,清理之前生成的编译缓存
rm -rf CMakeCache.txt CMakeFiles/
- 执行带额外编译参数的cmake命令
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-Wno-error=deprecated-copy -Wno-deprecated-copy"
- 正常执行make即可编译成功
make -j$(sysctl -n hw.ncpu)
方案二:升级FlatBuffer版本
如果业务没有强依赖老版本FlatBuffer,直接使用v2.0.0及以上版本的源码即可原生兼容高版本Clang编译,无需额外修改参数。
内容的提问来源于stack exchange,提问作者Sujan Davangere Sunil
相关产品推荐
相关产品推荐

