编译srt-live-server时出现offsetof等编译警告/错误,求助解决方法
编译srt-live-server时出现offsetof等编译警告/错误,求助解决方法
看起来你遇到的是新版本GCC对C++标准严格检查导致的兼容性问题——srt-live-server的代码应该是针对旧版GCC编写的,而你的系统用了更新的编译器(比如GCC 8及以上),这些新版本会对非标准布局类型使用offsetof、typedef语法细节等做更严格的校验,于是触发了警告(严重的话可能直接导致编译失败)。
给你几个实用的解决思路:
方法1:修改编译参数,让编译器兼容旧标准
这是最快捷的方法,不需要换编译器。你需要修改srt-live-server的Makefile,给编译命令添加兼容选项:
打开项目根目录下的
Makefile文件找到定义
CXXFLAGS的地方(如果没有就找所有g++编译的行),添加以下参数:-std=gnu++11:指定使用旧版C++标准(兼容代码原本的编写环境)-Wno-invalid-offsetof:屏蔽offsetof相关的警告-Wno-ignored-typedefs:屏蔽typedef被忽略的警告
比如你提到的那条编译命令,修改后应该是:
g++ -c -g -std=gnu++11 -Wno-invalid-offsetof -Wno-ignored-typedefs slscore/SLSMapPublisher.cpp -o obj/SLSMapPublisher.o如果Makefile里有全局的
CXXFLAGS变量,直接把这些参数加进去就行,这样所有编译步骤都会自动应用。
方法2:安装指定版本的GCC/G++(比如GCC 6)
如果修改编译参数还是不行,可以尝试安装旧版编译器并指定用它来编译:
以Ubuntu/Debian系统为例:
- 安装GCC 6和G++ 6:
sudo apt update && sudo apt install gcc-6 g++-6 - 临时将GCC 6设置为默认编译器:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6 - 现在执行
make编译srt-live-server,应该就能正常通过了 - 编译完成后,如果需要切回原来的新版本编译器,执行:
然后在列表里选择你原本的编译器版本即可。sudo update-alternatives --config gcc
方法3:修改代码适配新标准(进阶)
如果你愿意折腾代码的话,可以尝试修复根源问题:
- 对于
offsetof的警告:sls_conf_relay_t这个结构体是非标准布局类型(比如包含虚函数、不同访问权限的成员混合定义),你可以调整结构体的定义,把所有成员放在同一个访问控制块(比如都是public),并且确保没有虚函数,这样它就符合标准布局,offsetof就能正常使用了。 - 对于
typedef被忽略的警告:找到slscore/common.hpp第120行的typedef代码,检查是否有语法问题(比如重复定义、或者和C++11+的新特性冲突),调整成符合新标准的写法。
不过这种方法需要你对C++代码有一定了解,适合不想依赖旧编译器的场景。
备注:内容来源于stack exchange,提问作者Melonendk
相关产品推荐
相关产品推荐

