Windows下qmake项目链接SRT库遇未解析外部符号错误求助
Windows下qmake链接SRT v1.5.1的链接错误排查与解决
问题背景
已完成SRT v1.5.1的Windows安装,在qmake的.pri文件中配置了链接路径与库:
LIBS += "-LC:\Program Files (x86)\libsrt\lib\Debug-x64" -llibcrypto LIBS += "-LC:\Program Files (x86)\libsrt\lib\Debug-x64" -lsrt
编译时出现以下链接错误:
srt.lib(api.obj) : error LNK2001: unresolved external symbol in6addr_any srt.lib(channel.obj) : error LNK2019: unresolved external symbol __std_find_trivial_4 referenced in function "int const * __cdecl __std_find_trivial<int const ,int>(int const *,int const *,int)" (??$__std_find_trivial@$$CBHH@@YAPEBHPEBH0H@Z) srt.lib(socketconfig.obj) : error LNK2001: unresolved external symbol __std_find_trivial_4 libcrypto.lib(libcrypto-lib-cryptlib.obj) : error LNK2019: unresolved external symbol __imp_GetProcessWindowStation referenced in function OPENSSL_isservice libcrypto.lib(libcrypto-lib-cryptlib.obj) : error LNK2019: unresolved external symbol __imp_GetUserObjectInformationW referenced in function OPENSSL_isservice libcrypto.lib(libcrypto-lib-cryptlib.obj) : error LNK2019: unresolved external symbol __imp_MessageBoxW referenced in function OPENSSL_showfatal
安装目录C:\Program Files (x86)\libsrt\lib\Debug-x64下仅存在libcrypto.lib、libssl.lib和srt.lib,无法定位问题原因。
解决步骤
1. 补充系统依赖库
这些错误源于缺少Windows系统库和标准库的引用:
in6addr_any属于IPv6网络符号,需链接ws2_32.lib和iphlpapi.lib__std_find_trivial_4是MSVC标准库符号,Debug模式需链接libcmtd.lib,Release模式需链接libcmt.libGetProcessWindowStation等API属于用户界面/系统服务范畴,需链接user32.lib和advapi32.lib
修改.pri文件,补充依赖:
# SRT与OpenSSL库配置 LIBS += "-LC:\Program Files (x86)\libsrt\lib\Debug-x64" -llibcrypto -llibssl -lsrt # 补充系统依赖库 LIBS += -lws2_32 -liphlpapi -luser32 -ladvapi32 # 匹配Debug模式的标准库链接 CONFIG(debug, debug|release) { LIBS += -llibcmtd }
2. 校验编译模式一致性
确保qmake项目的编译参数与SRT库完全匹配:
- 当前使用
Debug-x64库,需确认项目构建目标为x64 Debug - 若项目为Release模式,需切换到
Release-x64目录下的对应库文件
3. 确认OpenSSL版本兼容性
SRT依赖OpenSSL,安装包中的静态库需与项目使用的MSVC工具链版本一致(如均为MSVC 2019或2022),版本不兼容会导致符号解析失败。
内容的提问来源于stack exchange,提问作者user680891
相关产品推荐
相关产品推荐

