升级MacOS导致WebRTC无法编译

这篇博客主要讲述了在MacOS升级后,编译项目时遇到的SDK路径和clang问题。由于系统升级到Monterey,find_sdk.py脚本需要更新以支持新的SDK版本12.0。通过修改find_sdk.py脚本中的正则表达式来匹配11.x版本的SDK,并调整.gn文件中的mac_sdk_min选项。此外,还提到了因SDK版本与LLVM不匹配导致的clang错误,解决方案是从Google仓库获取匹配的LLVM版本替换原有版本。

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

SDK路径问题

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

  1. 通过命令xcrun --show-sdk-version可以知道当前SDK的版本
  2. 修改.gn文件的mac_sdk_min选项为当前系统版本:11.0
  3. 打开find_sdk.py阅读代码发现了只支持10.xx的系统,修改11即可
scripts/gen_mac.sh
ERROR at //build/config/mac/mac_sdk.gni:55:5: Script returned non-zero exit code.
    exec_script("//build/mac/find_sdk.py", find_sdk_args, "list lines")
    ^----------
Current dir: /Users/stone/mediacore/out/ios/
Command: python -- /Users/stone/mediacore/build/mac/find_sdk.py --print_sdk_path 11.0
Returned 1.
stderr:

Traceback (most recent call last):
  File "/Users/stone/mediacore/build/mac/find_sdk.py", line 89, in <module>
    print main()
  File "/Users/stone/mediacore/build/mac/find_sdk.py", line 62, in main
    raise Exception('No %s+ SDK found' % min_sdk_version)
Exception: No 11.0+ SDK found

See //build/toolchain/mac/BUILD.gn:14:1: whence it was imported.
import("//build/config/mac/mac_sdk.gni")
^--------------------------------------
See //BUILD.gn:11:1: which caused the file to be included.
group("default") {

find_sdk.py的修改

--- a/build/mac/find_sdk.py
+++ b/build/mac/find_sdk.py
@@ -54,7 +54,7 @@ def main():
     raise Exception('Error %d running xcode-select' % job.returncode)
   sdk_dir = os.path.join(
       out.rstrip(), 'Platforms/MacOSX.platform/Developer/SDKs')
-  sdks = [re.findall('^MacOSX(10\.\d+)\.sdk$', s) for s in os.listdir(sdk_dir)]
+  sdks = [re.findall('^MacOSX(11\.\d+)\.sdk$', s) for s in os.listdir(sdk_dir)]
   sdks = [s[0] for s in sdks if s]  # [['10.5'], ['10.6']] => ['10.5', '10.6']
   sdks = [s for s in sdks  # ['10.5', '10.6'] => ['10.6']
           if parse_version(s) >= parse_version(min_sdk_version)]

clang问题

报错的地方在SDK的这行#define NS_FORMAT_ARGUMENT(A) __attribute__ ((format_arg(A))),找不到format_arg导致的,这个是因为Mac SDK的版本的跟llvm的版本不匹配导致的,从Google仓库下载一个匹配的llvm就可以了,几乎都是这个问题chromium-browser-clang(需要能访问外网),替换掉src/third_party/llvm-build

In file included from ../../webrtc/rtc_base/thread_darwin.mm:13:
In file included from ../../../../../Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:12:
../../../../../Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h:91:143: error: function does not return NSString
- (NSAttributedString *)localizedAttributedStringForKey:(NSString *)key value:(nullable NSString *)value table:(nullable NSString *)tableName NS_FORMAT_ARGUMENT(1) NS_REFINED_FOR_SWIFT API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0));
                                                         ~~~~~~~~~~~~~~                                                                       ^                  ~
../../../../../Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:103:48: note: expanded from macro 'NS_FORMAT_ARGUMENT'
        #define NS_FORMAT_ARGUMENT(A) __attribute__ ((format_arg(A)))
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值