有一个 c++库,需要跨平台使用,但是目前手上没有 mac 系统的机器。
所以请问一下大家,M1 芯片的 MacOS 下的 xcode,可否交叉编译出 intel 芯片 mac 系统的二进制文件呢?
如果可以的话,只要买一个 M1 的 mac 机器就行了。
谢谢。
![]() | 1 huage2580 2021-04-20 09:05:17 +08:00 我也有此疑惑,一直没升级 m1 |
3 missdeer 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 架构的版本,可能需要自己去补齐 |
![]() | 4 agagega 2021-04-20 09:16:53 +08:00 刚刚试了下,可以。 clang -target x86_64-apple-darwin-macho |
![]() | 7 huage2580 2021-04-20 09:49:07 +08:00 |
8 xuegy 2021-04-20 09:54:37 +08:00 via iPhone 代码本身不太可能出现问题,依赖库可能会出大问题。 |
![]() | 9 agagega 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 这个工具把两个版本的二进制文件合并到一起 |
11 MrKrabs 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 |
![]() | 12 SpringHack 2021-04-20 19:12:51 +08:00 亲测可以,在 m1 下编译了一遍 x86_64 的 chromium,就是这感人的速度差点当场去世 |
![]() | 13 qdwang OP @SpringHack 太棒了,非常感谢 |
![]() | 15 baiyunheitu 2021-05-25 22:49:45 +08:00 @SpringHack 请问一下完整编译一次大约需要多久。目前我用 10700 耗时大约是 2h 。 |