我一直在为Windows开发WebRtc。我想开发基于webrtc的桌面应用程序。为了学习和更好的理解,我从无到有地做着。
-- WebRtc库编译的正常过程:
我最初是从(开始使用WinRTC)开始的。我遵循了正常的编译过程。在此之后,我尝试了多种方法为webrtc生成项目文件,例如;
1.Default
gn gen --ide=vs2019 out/Default2.习俗旗
gn gen --ide=vs2019 out/Default --args="use_rtti=true is_clang=false rtc_build_tools=false rtc_include_tests=false rtc_build_examples=false"3.习俗旗
gn gen --ide=vs2019 out\Default --filters=//:webrtc "--args=is_debug=true use_lld=false is_clang=false rtc_include_tests=true rtc_build_tools=true rtc_win_video_capture_winrt=true target_cpu=\"x86\" target_os=\"win\" rtc_build_examples=true rtc_win_use_mf_h264=true enable_libaom=true rtc_enable_protobuf=true"在建筑过程中,我采用了以下方法:
带有命令行的:
运行以下命令,从命令行构建修补的WebRTC。
ninja -C out\Default\x64与Visual 2019:
使用以下命令打开生成的Visual解决方案:
devenv out\Default\x64\all.sln我尝试过几乎所有可用的组合来生成生成文件和构建webrtc.lib静态库。我成功地为这两种架构编译了静态webrtc库webrtc.lib;

重要:
我已经成功地在windows上运行了
peerconnection_server.exe和peerconnection_client.exe。这些示例正在本地主机上成功运行。
使用VS2019:
之后,我使用VS2019创建了一个新的基于控制台的项目来使用生成的二进制文件,并遵循以下步骤;
配置属性→C/C++→General→附加包含目录并添加以下路径:
c:\webrtc\src
c:\webrtc\src\out\Default\$(Configuration)\$(PlatformTarget)\gen
c:\webrtc\src\third_party\abseil-cpp
c:\webrtc\src\third_party\libyuv\include单击预处理器→预处理器定义并添加以下定义:
USE_AURA=1;_HAS_EXCEPTIONS=0;__STD_C;_CRT_RAND_S;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;_ATL_NO_OPENGL;_WINDOWS;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;PSAPI_VERSION=2;WIN32;_SECURE_ATL;WINUWP;__WRL_NO_DEFAULT_LIB__;WINAPI_FAMILY=WINAPI_FAMILY_PC_APP;WIN10=_WIN32_WINNT_WIN10;WIN32_LEAN_AND_MEAN;NOMINMAX;_UNICODE;UNICODE;NTDDI_VERSION=NTDDI_WIN10_RS2;_WIN32_WINNT=0x0A00;WINVER=0x0A00;NDEBUG;NVALGRIND;DYNAMIC_ANNOTATIONS_ENABLED=0;WEBRTC_ENABLE_PROTOBUF=0;WEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE;RTC_ENABLE_VP9;HAVE_SCTP;WEBRTC_LIBRARY_IMPL;WEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=0;WEBRTC_WIN;ABSL_ALLOCATOR_NOTHROW=1;HAVE_SCTP;WEBRTC_VIDEO_CAPTURE_WINRT单击Linker→常规→附加库目录并添加以下路径:
c:\webrtc\src\out\Default\$(Configuration)\$(PlatformTarget)\obj单击Input→附加依赖项并添加以下文件名:
webrtc.lib现在,当我简单地使用这个基本实现时,例如;
#include <iostream>
#include "rtc_base/thread.h"
#include "rtc_base/logging.h"
#include "rtc_base/ssl_adapter.h"
#include "rtc_base/arraysize.h"
#include "rtc_base/net_helpers.h"
#include "rtc_base/string_utils.h"
#include "rtc_base/signal_thread.h"
int main(int argc, char** argv) {
rtc::InitializeSSL();
return 0;
}程序中充斥着两种类型的错误:
1. LNK2038 mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug'另一个是
2. LNK2038 mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2'您还可以看到给定的情况;在这里,我将webrtc.lib与配置(Release) & Platform (x64)结合使用。

使用Clien-2021.2.1和CMAKE:
在这里,我使用了webrtc.lib和配置(Release) & Platform (x86)。
给出了CMakeLists.txt;
cmake_minimum_required(VERSION 3.20)
project(NewRtc)
set(CMAKE_CXX_STANDARD 14)
#set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
#set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
include_directories(
"c:/webrtc/src"
"C:/webrtc/src/out/Default/x86/obj"
"c:/webrtc/src/third_party/abseil-cpp"
"c:/webrtc/src/third_party/libyuv/include"
)
# error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
# Solution:
#1. _ITERATOR_DEBUG_LEVEL = 0 // disabled (for release builds)
#2. _ITERATOR_DEBUG_LEVEL = 1 // enabled (if _SECURE_SCL is defined)
#3. _ITERATOR_DEBUG_LEVEL = 2 // enabled (for debug builds)
add_definitions(
-D_ITERATOR_DEBUG_LEVEL=0
-DUSE_AURA=1
-D_HAS_EXCEPTIONS=0
-D__STD_C
-D_CRT_RAND_S
-D_CRT_SECURE_NO_DEPRECATE
-D_SCL_SECURE_NO_DEPRECATE
-D_ATL_NO_OPENGL
-D_WINDOWS
-DCERT_CHAIN_PARA_HAS_EXTRA_FIELDS
-DPSAPI_VERSION=2
-DWIN32
-D_SECURE_ATL
-DWINUWP
-D__WRL_NO_DEFAULT_LIB__
-DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP
-DWIN10=_WIN32_WINNT_WIN10
-DWIN32_LEAN_AND_MEAN
-DNOMINMAX
-D_UNICODE
-DUNICODE
-DNTDDI_VERSION=NTDDI_WIN10_RS2
-D_WIN32_WINNT=0x0A00
-DWINVER=0x0A00
-DNDEBUG
-DNVALGRIND
-DDYNAMIC_ANNOTATIONS_ENABLED=0
-DWEBRTC_ENABLE_PROTOBUF=0
-DWEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE
-DRTC_ENABLE_VP9
-DHAVE_SCTP
-DWEBRTC_LIBRARY_IMPL
-DWEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=0
-DWEBRTC_WIN
-DABSL_ALLOCATOR_NOTHROW=1
-DHAVE_SCTP
-DWEBRTC_VIDEO_CAPTURE_WINRT)
#set(CMAKE_CXX_FLAGS_RELEASE "/MT")
#set(CMAKE_CXX_FLAGS_DEBUG "/MTd")
set(-Dwebrtc.lib)
add_executable(NewRtc main.cpp)
set_property(TARGET NewRtc PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
target_link_libraries(NewRtc
PRIVATE "C:/webrtc/src/out/Default/x86/obj/webrtc.lib"
)但是,当我简单地构建项目时,WebRtc的每个实现都会出现这个错误。在这里你可以看到:

请帮助我,我如何能够简单地使用webrtc库在任何项目上的windows起诉VS2019或can。我试图解决这些问题,我尝试了多个解决方案的堆栈溢出和其他社区使用cmake或添加标志的项目属性,如;
我已经尽力解释了完整的解决方案和相关的问题,以便有人能相应地帮助我。
发布于 2021-09-19 09:46:50
伙计们,在花了将近12个小时的研究之后,我创造了我的一天。我已经准确地了解了在(VS2019/Clion)中在可执行项目中使用静态webrtc.lib的开发设置有什么问题。
我必须感谢@先生对我问题的支持。它真的很感激。
从库编译到它在its 2019/Clion项目中的使用,所有事情都有积极的方向。实际上,.netCore项目中的webrtc开发需要一些有用的库,以便在项目中正常使用webrtc.lib。
以下是您在开发过程中必须使用的库列表,例如;
For Windows:
为Windows构建WebRtc项目所需的模块如下;
WS2_32 secur32.lib winmm.lib dmoguids.lib wmcodecdspuuid.lib msdmo.lib Strmiids.libFor Linux:
为Linux构建WebRtc项目所需的模块如下;
Secur32 Msdmo Winmm Dmoguids wmcodecdspuuid这些都是重要的库,因为webrtc点对点通信主要是在C/C++中为Linux和Windows操作系统提供广泛的实现。
如何在项目中使用这些库:
CmakeLists.txt#pragma关键字For CMakeLists.txt:
您可以简单地将这些模块包含在target_link_libraries()中,在其中您还将链接webrtc.lib,例如;
add_executable(NewRtc main.cpp)
set_property(TARGET NewRtc PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
target_link_libraries(NewRtc
PRIVATE "{$LIB_PATH}/webrtc.lib"
# Required Modules for building projects
WS2_32 secur32.lib winmm.lib dmoguids.lib wmcodecdspuuid.lib msdmo.lib Strmiids.lib
)#Pragma关键字::
您可以在可执行文件中使用#pragma关键字直接包含所有所需的库(在我的例子中是main.cpp),例如;
# pragma comment(lib, "webrtc.lib")
# pragma comment(lib,"WS2_32")
# pragma comment(lib, "secur32.lib")
# pragma comment(lib, "winmm.lib")
# pragma comment(lib, "dmoguids.lib")
# pragma comment(lib, "wmcodecdspuuid.lib")
# pragma comment(lib, "msdmo.lib")
# pragma comment(lib, "Strmiids.lib")这两种程序将100%地达到同样的目的。我希望这能帮到别人。
https://stackoverflow.com/questions/69235936
复制相似问题