记录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
上一篇 下一篇

猜你喜欢

热点阅读