有些人在编译的时候出现了错误,你要了解你的这个错误是属于哪个环节的错误,这个属于编译这块的知识,最好还是系统性的学习一下。
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
即可
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)))