live555 sample编译使用

编译源码(自动生成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()(逻辑等价),步骤如下:

  1. 打开报错文件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);

相关推荐
口嗨农民工6 小时前
live555 的发展历史
流媒体
口嗨农民工6 小时前
live555 发展关键事件
流媒体
每日出拳老爷子15 小时前
【远程协助】内网 IT 运维远程协助系统的最小可用架构
运维·服务器·远程工作·流媒体·视音频
每日出拳老爷子2 天前
【客户端方案】Electron / 原生客户端在内网会议中的取舍与坑点
服务器·electron·远程工作·流媒体·视音频
每日出拳老爷子2 天前
【浏览器方案】只用浏览器访问的内网会议系统设计思路(无客户端)
运维·服务器·webrtc·实时音视频·流媒体
aqi005 天前
FFmpeg开发笔记(九十八)基于FFmpeg的跨平台图形用户界面LosslessCut
android·ffmpeg·kotlin·音视频·直播·流媒体
aqi006 天前
FFmpeg开发笔记(九十七)国产的开源视频剪辑工具AndroidVideoEditor
android·ffmpeg·音视频·直播·流媒体
aqi007 天前
FFmpeg开发笔记(一百)国产的Android开源视频压缩工具VideoSlimmer
android·ffmpeg·音视频·直播·流媒体
haibindev9 天前
【终极踩坑指南】Windows 10上MsQuic证书加载失败?坑不在证书,而在Schannel!
直播·http3·quic·流媒体