有一个 c++库,需要跨平台使用,但是目前手上没有 mac 系统的机器。
所以请问一下大家,M1 芯片的 MacOS 下的 xcode,可否交叉编译出 intel 芯片 mac 系统的二进制文件呢?
如果可以的话,只要买一个 M1 的 mac 机器就行了。
谢谢。
|  |      1huage2580      2021-04-20 09:05:17 +08:00 我也有此疑惑,一直没升级 m1 | 
|      3missdeer      2021-04-20 09:11:36 +08:00 简单的程序是可以的,clang 支持命令行参数--target,比如`clang main.cpp -lc++ -o test --target=x86_64-apple-darwin`,生成的 test 文件用 file 命令看一下,就能发现是`Mach-O 64-bit executable x86_64`,如果不加--target 参数,默认生成的文件则是`Mach-O 64-bit executable arm64` 不过大问题是,大程序依赖的一些库并不一定默认就有 2 种 CPU 架构的版本,可能需要自己去补齐 | 
|  |      4agagega      2021-04-20 09:16:53 +08:00 刚刚试了下,可以。 clang -target x86_64-apple-darwin-macho | 
|  |      7huage2580      2021-04-20 09:49:07 +08:00 | 
|      8xuegy      2021-04-20 09:54:37 +08:00 via iPhone 代码本身不太可能出现问题,依赖库可能会出大问题。 | 
|  |      9agagega      2021-04-20 10:49:35 +08:00 via iPhone @huage2580  参考 https://developer.apple.com/documentation/apple-silicon/building-a-universal-macos-binary clang 本身一次是只能编译到一个平台的,命令行下面要用 lipo 这个工具把两个版本的二进制文件合并到一起 | 
|      11MrKrabs      2021-04-20 15:35:48 +08:00 clang -arch arm64 -arch x86_64 test.c lipo -info a.out Architectures in the fat file: a.out are: x86_64 arm64 | 
|  |      12SpringHack      2021-04-20 19:12:51 +08:00 亲测可以,在 m1 下编译了一遍 x86_64 的 chromium,就是这感人的速度差点当场去世 | 
|  |      13qdwang OP @SpringHack 太棒了,非常感谢 | 
|  |      15baiyunheitu      2021-05-25 22:49:45 +08:00 @SpringHack 请问一下完整编译一次大约需要多久。目前我用 10700 耗时大约是 2h 。 |