记录window cmake 加载 webrtc.lib
2023-08-19 本文已影响0人
FM_1ad7
gn gen --ide=vs2022 --args="is_clang = true use_custom_libcxx = false use_rtti=true rtc_include_tests=false enable_iterator_debugging=true symbol_level=0 " ../out/debug_x64
ninja -C ../out/debug_x64
use_custom_libcxx = false use_custom_libcxx=false这是用来控制编译WebRtc时使用的c++库的。原因很简单,如果不加这个编译开关的话,WebRtc编译默认使用libc++来编译,而我们编译别的代码用的是libstdc++,这样在编译的过程中就会导致用到std::string的地方各种错误
rtc_include_tests=false 关闭单元测试代码,挺高速度
如果生成遇见下面的 错误
implicit conversion changes signedness: 'size_t' (aka 'unsigned long long') to 'ptrdiff_t' (aka 'long long') [-Wsign-conversion]
修改编译文件
third_party/abseil-cpp/BUILD.gn
config("absl_default_cflags_cc") {
#cflags_cc = [""]
cflags_cc = ["-Wno-error"] #关闭调 警告报错
if (is_clang) {
cflags_cc += [
# TODO(crbug.com/588506): Explicitly enable conversion warnings.
"-Wbool-conversion",
"-Wconstant-conversion",
"-Wenum-conversion",
"-Wint-conversion",
"-Wliteral-conversion",
"-Wnon-literal-null-conversion",
"-Wnull-conversion",
"-Wobjc-literal-conversion",
"-Wstring-conversion",
]
if (!is_nacl) {
cflags_cc += [ "-Wbitfield-enum-conversion" ]
}
}
}
成功之后的 cmake配置, cmake参考的文章
https://stackoverflow.com/questions/69235936/how-to-use-webrtc-lib-static-library-in-vs-2019-or-clion-project
cmake_minimum_required(VERSION 3.21.3)
project(webrtcAudio)
#set(CMAKE_CXX_STANDARD 14)
set(CMAKE_C_COMPILER "clang")
#set(CMAKE_CXX_COMPILER "clang++")
include_directories(
"G:/webrtc/webrtc-checkout/src"
"G:/webrtc/webrtc-checkout/src/out/debug_x64/obj"
"G:/webrtc/webrtc-checkout/src/third_party/abseil-cpp"
"G:/webrtc/webrtc-checkout/src/third_party/libyuv/include"
)
add_definitions(
-D_ITERATOR_DEBUG_LEVEL=2
-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(-Dwebrtc.lib)
#
add_executable(webrtcAudio main.cc)
set_property(TARGET webrtcAudio PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
target_link_libraries(webrtcAudio
PRIVATE
"G:/webrtc/webrtc-checkout/out/debug_x64/obj/webrtc.lib" #配置自己的路径
WS2_32 secur32.lib winmm.lib dmoguids.lib wmcodecdspuuid.lib msdmo.lib Strmiids.lib
)
解决检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”的问题
set_property(TARGET webrtcAudio PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
解决无法解析的外部符号 __imp_getsockopt 的问题
WS2_32 secur32.lib winmm.lib dmoguids.lib wmcodecdspuuid.lib msdmo.lib Strmiids.lib
解决无法解析 __imp_GetAdaptersAddresses window 获取网卡信息
Iphlpapi.lib