升级MacOS导致WebRTC无法编译

有些人在编译的时候出现了错误,你要了解你的这个错误是属于哪个环节的错误,这个属于编译这块的知识,最好还是系统性的学习一下。

SDK路径问题

MacOS升级至Big Sur以后需要重新生成gn文件,遇到如下问题。经过排除是因为find_sdk.py这个文件只会找10的系统。最近升级了macOS Monterey,相应的只需要把对应的地方改为12就好了。

通过命令xcrun --show-sdk-version可以知道当前SDK的版本

修改.gn文件的mac_sdk_min选项为当前系统版本:11.0

打开find_sdk.py阅读代码发现了只支持10.xx的系统,修改11即可


clang问题


报错的地方在SDK的这行#define NS_FORMAT_ARGUMENT(A) __attribute__ ((format_arg(A))),找不到format_arg导致的,这个是因为WebRTC使用的clang不支持导致的,需要升级clang,也可以从我的GitHub上取,详情看这里


WebRTC本身是支持多平台,不过它在下载的时候是区分平台的,本身也不支持一个项目多平台编译(Linux、Windows和MacOS),稍微改动一下编译脚本就可以支持了,我们还需要把用到的所有第三方库都一起下载下来放到一个项目中。


build 修改


修改build/config/clang/clang.gni文件,根据不同的平台选择不同的llvm,我们需要分别下载不同的平台的llvm,然后放到指定的位置。也可以自行升级对应的clang。


import("//build/toolchain/toolchain.gni")declare_args() {#Indicates if the build should use the Chrome-specific plugins for enforcing#coding guidelines, etc. Only used when compiling with Clang.clang_use_chrome_plugins = is_clang&&!is_nacl&&!use_xcode_clang#clang_base_path = "//third_party/llvm-build/Release+Asserts"if(host_os =="linux") { clang_base_path ="//third_party/llvm-build/linux/Release+Asserts"}elseif(host_os =="mac") { clang_base_path ="//third_party/llvm-build/macos/Release+Asserts"}elseif(host_os =="win") { clang_base_path ="//third_party/llvm-build/win/Release+Asserts"}}

你可能感兴趣的:(升级MacOS导致WebRTC无法编译)