有一个 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 。
|