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

Linux下Clang编译sample_test_webrtc时Mutex失败问题排查

WebRTC静态链接示例运行时互斥锁断言失败问题

WebRTC仓库包含内部示例应用sample_test_webrtc,使用GN+Ninja构建后可正常运行。将该示例代码单独取出,与自行编译的libwebrtc.a静态链接后,运行触发断言错误。

构建libwebrtc.a的GN命令

./buildtools/linux64/gn gen out/Default --target_cpu=x64 --target_os="linux" --host_os="linux" --host_cpu="x64" --args="is_debug=false rtc_include_tests=false libyuv_include_tests=false rtc_build_examples=false 
is_component_build=false use_rtti=true use_custom_libcxx=false rtc_enable_protobuf=false clang_use_chrome_plugins=false rtc_ios_macos_use_opengl_rendering=false rtc_libvpx_build_vp9=false archive_seed_corpus=false 
toolkit_views=false enable_iterator_debugging=false enable_libaom=false rtc_build_tools=false" --complete_static_lib

自行编译示例的Makefile

CC = clang++
CFLAGS = -Wall -g -DWEBRTC_POSIX -std=c++17 -stdlib=libstdc++

SRC_DIR = $(PWD)
SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp) $(wildcard $(SRC_DIR)/*/*.cpp) 

OBJ_DIR = $(PWD)/Obj
OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp, $(OBJ_DIR)/%.o, $(SRC_FILES)) 
ADDITIONAL_OBJ_FILES = $(PWD)/Deps/*.o

INCLUDES_PATH = -I. -I/home/stefan/webrtc-l4s/webrtc_native/m104/src -I../../third_party/webrtc/buildtools/third_party -I../../third_party/webrtc/third_party/abseil-cpp/ 
LIBRARIES_PATH = -L../../third_party/webrtc/buildtools/third_party -L/home/stefan/webrtc-l4s/webrtc_native/m104/src/out/Default2/obj
#use portable -pthread instead of classic -lpthread
LIBS = -pthread -ldl -lX11 -L. -lwebrtc  

BIN_DIR = $(PWD)/Bin
TARGET_BINARY = $(BIN_DIR)/demoWebrtc.bin

all: $(TARGET_BINARY)
    @echo "[Build log] Target binary successfully built!"

$(TARGET_BINARY): $(OBJ_FILES)
    @echo "[Build log] Linking..." 
    @echo $(ADDITIONAL_OBJ_FILES)
    $(CC) $(LIBRARIES_PATH) -o $@ $^ $(LIBS)
    @echo "[Build log] Program linked!" 

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
    @echo "[Build log] Compiling..."
    $(CC) $(CFLAGS) $(INCLUDES_PATH) -c $< -o $@
    @echo "[Build log] File" $< "compiled!"  

clean:
    rm -rf $(OBJ_DIR)/*.o
    rm -rf $(BIN_DIR)/*.bin

运行时错误信息

demoWebrtc.bin: ../nptl/pthread_mutex_lock.c:81: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.
Aborted (core dumped)

问题分析与疑问

错误指向WebRTC源码中src/rtc_base/synchronization/sequence_checker_internal.cc的SequenceCheckerImpl::IsCurrent()方法,表现为线程尝试重复获取已持有的互斥锁。已确认WebRTC实现及示例代码本身无问题,尝试常规线程问题解决方案无效。

疑问:

  • 为何GN+Ninja构建该示例时无此问题?
  • 自行构建过程中缺失了哪些关键环节?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:58:16