如何编译构建一个同时支持多cpu架构的静态链接库(.a文件)

原创 吴就业 102 0 2024-07-20

本文为博主原创文章,未经博主允许不得转载。

本文链接:https://wujiuye.com/article/c73aeb3f14164cc68756f8be52376588

作者:吴就业
链接:https://wujiuye.com/article/c73aeb3f14164cc68756f8be52376588
来源:吴就业的网络日记
本文为博主原创文章,未经博主允许不得转载。

最近开发了一款mac OS 应用,其核心逻辑使用go语言编写,并通过cgo编译成静态链接库,提供给swift调用。

然鹅,mac电脑还有很多存量的使用因特尔芯片的设备,因特尔芯片采用的是amd64(x86_64)的cpu架构。这意味着,我想要让自己的mac OS应用支持更多用户可以使用,就必须要打出一个能同在amd64架构cpu的mac os设备上运行,也需要能在arm64架构cpu的mac os设备上运行。

但是,没有一个工具能够直接将go编译成一个同时支持arm64和amd64的静态链接库,那怎么办呢?

Xcode为我们提供了一个工具:lipo,能够实现将多个静态链接库合并成一个。虽然有些麻烦,不能一步到位,但至少能达到目的了。

macOS xcode lipo

假如我们已经打出了两个静态链接库,分别是xx_arm64.a、xx_amd64.a。

现在我们只需要执行以下命令,就能将这两个链接库合并成一个。

lipo -create xx_arm64.a xx_amd64.a -output xx.a

没错,就是这么简单。

可以用lipo -info验证一下:

MacBook-Pro-2:export_c wjy$ lipo -info xx.a 
Architectures in the fat file: xx.a are: x86_64 arm64 

其中x86_64就是amd64。


参考文献:

#前端

声明:公众号、CSDN、掘金的曾用名:“Java艺术”,因此您可能看到一些早期的文章的图片有“Java艺术”的水印。

文章推荐

微信小程序原生开发获取input光标位置和监听光标位置改变问题

input失去焦点后,用户点击input重新获取焦点,怎么获取光标位置?如果用户获取到焦点之后,没有输入,而是移动光标,怎么获取移动后的光标位置呢?

SwiftUI开发macOS APP,如何自定义标题栏(TitleBar)

macOS APP应用的标题栏(TitleBar)是指包含“交通信号灯”(红黄绿三个小按钮)的一栏,通常TitleBar只包括“交通信号灯”和一个title,使用SwiftUI开发macOS APP,怎么把TitleBar隐藏掉呢?

如何将macOS app发布到app store?

开发完一个macOS app之后,我们应该如何将其发布到app store呢?这个文档记录了笔者从零开始一步步学习将自己开发好的macOS app发布到app store的过程。

使用node:alpine基础镜像今天突然就构建不了了

我的一个nextjs项目使用node:alpine基础镜像,在此之前部署到线上都能正常构建和运行,今天修改点代码提交到生产环境,发现竟然镜像构建失败了。

SwiftUI macOS开发,Button和TextField控件设置背景色不生效的问题

SwiftUI macOS开发,Button和TextField控件设置背景色不生效的问题。

SwiftUI Chart如何修改字体颜色

使用Charts绘制的图表,默认文字都是灰色的,当我们app的主题颜色是固定深色的情况下,图表的文字会看不清,怎么修改呢?