编译源码(自动生成sample可执行文件)
执行配置脚本(自动识别系统环境)
./genMakefiles linux # 针对Linux系统,其他系统可替换为macosx/win32等
编译(-j后接CPU核心数,加快编译)
make
D=1 BasicTaskScheduler.cpp
BasicTaskScheduler.cpp: In member function 'virtual void BasicTaskScheduler::SingleStep(unsigned int)':
BasicTaskScheduler.cpp:191:40: error: 'struct std::atomic_flag' has no member named 'test'
191 | if (fTriggersAwaitingHandling[i].test()) {
| ^~~~
make[1]: *** [Makefile:41: BasicTaskScheduler.o] Error 1
一、报错原因详解
std::atomic_flag是 C++11 引入的原子标志,但它的test()成员函数是C++20 新增的:
- 你的编译器(比如 gcc 7.x 及以下)默认使用 C++11/C++14 标准,无法识别
test()方法;- live555 最新版源码用了 C++20 语法,但你的编译环境没适配,导致编译失败
修改代码(兼容旧 C++ 标准,最稳妥)
直接替换报错行的
test()为 C++11 兼容的test_and_set()(逻辑等价),步骤如下:
打开报错文件
BasicTaskScheduler.cpp,定位到 191 行:cpp
if (fTriggersAwaitingHandling[i].test()) {
// 先检测标志位,再还原(test_and_set()会置位,所以需要clear()) if (fTriggersAwaitingHandling[i].test_and_set(std::memory_order_acquire)) { fTriggersAwaitingHandling[i].clear(std::memory_order_release);
live555 sample编译使用
口嗨农民工2026-01-16 10:47
相关推荐
口嗨农民工6 小时前
live555 的发展历史口嗨农民工6 小时前
live555 发展关键事件每日出拳老爷子15 小时前
【远程协助】内网 IT 运维远程协助系统的最小可用架构每日出拳老爷子2 天前
【客户端方案】Electron / 原生客户端在内网会议中的取舍与坑点每日出拳老爷子2 天前
【浏览器方案】只用浏览器访问的内网会议系统设计思路(无客户端)aqi005 天前
FFmpeg开发笔记(九十八)基于FFmpeg的跨平台图形用户界面LosslessCutaqi006 天前
FFmpeg开发笔记(九十七)国产的开源视频剪辑工具AndroidVideoEditoraqi007 天前
FFmpeg开发笔记(一百)国产的Android开源视频压缩工具VideoSlimmerhaibindev9 天前
【终极踩坑指南】Windows 10上MsQuic证书加载失败?坑不在证书,而在Schannel!