我一直在為Windows平臺的WebRtc開發作業。我想開發基于webrtc的桌面應用程式。為了學習和更好地理解,我正在從頭開始做這件事。
WebRtc庫編譯的正常程序:
重要的是:
我已經成功地運行了
。peerconnection_server.exe和peerconnection_client.exe在windows上。這些例子是 成功運行在 localhost.
使用VS2019:
之后,我使用VS2019創建了一個新的基于Console的專案,以消耗生成的二進制檔案,并遵循以下步驟;
- 添加包含檔案夾
- 添加包含檔案夾
配置屬性→C/C →常規→附加包含目錄,并添加以下路徑:
配置屬性→C/C →常規→附加包含目錄。
c:webrtcsrc
c:webrtcsrcoutDefault$(配置)$(平臺目標)gen
c:webrtcsrc hird_partyabseil-cpp
c:webrtcsrc hird_partylibyuvinclude
- 預處理程式宏:
點擊預處理程式→預處理程式定義,并添加以下定義:
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 → General → Additional Library Directories并添加以下路徑:
c:webrtcsrcoutDefault$(Configuration)$(PlatformTarget)obj
- WebRTC庫名稱:
點擊輸入→附加依賴,添加以下檔案名:
webrtc.lib
現在,當我簡單地使用這個基本實作,如;
#include <iostream>
#include "rtc_base/thread.h"
#include "rtc_base/logging.h"
#include "rtc_base/ssl_adapter.h"/span>
#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檢測到不匹配 for 'RuntimeLibrary'/span>: 值'MTd_StaticDebug'不'匹配值'MDd_DynamicDebug'。
而另一個是
2. LNK2038檢測到不匹配 for '_ITERATOR_DEBUG_LEVEL'/span>。值'0'不't匹配值'2'。
你也可以看到,正如所給出的;這里我使用了webrtc.lib,配置(Release) & 平臺(x64)。
使用Clion-2021.2.1和CMAKE:
這里我使用了webrtc.lib,配置(Release) & 平臺(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")。/MT")
#set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") /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': 值'0'不匹配值'2' in main. obj
# 解決方案。
#1. _ITERATOR_DEBUG_LEVEL = 0 // 禁用(用于發布構建)
#2. _ITERATOR_DEBUG_LEVEL = 1 // enabled (if _SECURE_SCL is defined)
#3. _ITERATOR_DEBUG_LEVEL = 2 // 啟用 (用于除錯構建)
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
-Dynamic_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")
設定(-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的每個實作都出現了這個錯誤。這里你可以看到:
請協助我解決這個問題。
請幫助我,我怎樣才能簡單地在Windows上使用VS2019或Clion的任何專案中使用webrtc庫。我試圖解決這些問題,我已經在堆疊溢位和其他社區嘗試了多種解決方案,使用cmake或在專案屬性中添加標志,如;
- Linker Tool Errors
- /MD, /MT, /LD (Use Run-Time Library) 。
- LNK2038檢測到'_ITERATOR_DEBUG_LEVEL'的不匹配:值'0'與值'2'不匹配 。
- 檢測到'RuntimeLibrary'的不匹配 。
我已經盡力解釋完整的解決方案和相關的問題,以便有人可以相應地幫助我。
uj5u.com熱心網友回復:
好吧,伙計們,在花了將近12個小時的研究之后,我已經完成了我的使命。我已經完全弄清楚了我在(VS2019/Clion)中使用靜態webrtc.lib的可執行專案的開發設定中的問題所在。
我必須感謝@drescherjm先生 for他對我問題的支持。它's really appreciated.
從庫的編譯到它在VS2019/Clion專案中的使用,所有的事情都朝著積極的方向發展。事實上,在.netCore專案中開發webrtc需要一些有用的庫,以便在你的專案中正常使用webrtc.lib。
下面是你在開發程序中必須使用的庫的串列,如;
對于 Windows:
在Windows下構建WebRtc專案所需的模塊如下;
在Windows下構建WebRtc專案所需的模塊如下
WS2_32 secur32.lib winmm.lib dmoguids.lib wmcodecdspuuid.lib msdmo.lib Strmiids.lib
適用于Linux:
在Linux下構建WebRtc專案所需的模塊如下;
Secur32 Msdmo Winmm Dmoguids wmcodecdspuuid
這些都是重要的庫,因為webrtc點對點通信主要是在C/C 中廣泛實作socket編程,用于Linux以及Windows作業系統。
如何在專案中使用這些庫:
- 使用
CmakeLists.txt。
- 使用
#pragma關鍵字 。
對于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"
# 必要的模塊 用于構建專案
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://www.uj5u.com/shujuku/324703.html
標籤:



