从 CLI 提供程序的角度来看,可执行错误中的 CPU 类型错误

发布于 2025-01-12 05:37:14 字数 597 浏览 0 评论 0原文

我有自己的开源 CLI 工具,名为 surmagic。在我的最新更新中,我在另一台具有 M1 CPU 的机器上构建。在发布之前和之后,我通过安装 homebrew 在那台机器上进行了测试。它按预期工作。一段时间后,我在另一台配备Intel CPU的机器上进行了测试。而且,我曾经遇到过这个错误:

> surmagic --version
zsh: bad CPU type in executable: surmagic

我从我之前使用过的其他库中知道这个错误意味着什么,但问题是如何作为 CLI 工具提供者解决这个错误是另一个问题。

我需要这方面的帮助。怎么永远解决这个问题。

I've my own open-source CLI tool called surmagic. In my latest update, I've built on a different machine, which has an M1 CPU. Before and after publishing I've tested on that machine, via installing the homebrew. And it works as expected. After a while, I've tested on another machine that has an Intel CPU. And, I've been faced with this error:

> surmagic --version
zsh: bad CPU type in executable: surmagic

I know what this error means from other libraries that I've used before, but the problem is how to solve this error as a CLI tool provider is another question.

I need help with this. How to solve this forever.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2025-01-19 05:37:14

解决方案

首先,通过以下命令检查您的 Mac 架构:

> arch
i386

如果您的结果是 i386,就像我的情况一样。然后通过以下命令检查应用程序二进制文件的架构:

> cd /usr/local/bin
> lipo -info surmagic
Non-fat file: surmagic is architecture: arm64

如果结果是 arm64 non-fat,就像我的例子一样,那么您需要为您的库构建一个FAT可执行文件

请按照以下步骤操作:

如何构建通用二进制文件

首先,确保您使用的是正确版本的 Xcode/Swift:

> xcrun swift build --version
Swift Package Manager - Swift 5.5.0

注意:如果这不是 Swift 5.3 或更高版本,请使用 xcode-select -s 切换到Xcode 12 beta。

现在,在编译你的包时,指定两种架构来编译通用二进制文件(这里真正讽刺的是我的 CLI 工具实际上为 Xcode 项目创建了 FAT 库):

> xcrun swift build -c release --arch arm64 --arch x86_64

验证你构建的二进制文件是否包含这两种架构架构,您可以使用 lipo - info 命令 检查二进制文件并确认:

> lipo -info .build/apple/Products/Release/surmagic
Architectures in the fat file: .build/apple/Products/Release/surmagic are: x86_64 arm64

如果成功,您应该会看到 x86_64arm64

Solution

First, check your Mac's architecture via the command below:

> arch
i386

if your result is i386 like in my case. Then check the application binary's architecture via the command below:

> cd /usr/local/bin
> lipo -info surmagic
Non-fat file: surmagic is architecture: arm64

if this result is arm64 non-fat, like in my case, then you need to build a FAT executable for your library.

Follow the steps below:

How to Build a Universal Binary

Firstly, make sure that you are using the correct version of Xcode/Swift:

> xcrun swift build --version
Swift Package Manager - Swift 5.5.0

Note: If this is not Swift 5.3 or greater, use xcode-select -s to switch to the Xcode 12 beta.

Now, when compiling your package, specify both architectures to compile a Universal Binary (the real irony here is my CLI tool actually makes FAT libraries for Xcode project):

> xcrun swift build -c release --arch arm64 --arch x86_64

To verify that your built binary contains both architectures, you can use the lipo -info command to inspect a binary and confirm:

> lipo -info .build/apple/Products/Release/surmagic
Architectures in the fat file: .build/apple/Products/Release/surmagic are: x86_64 arm64

If successful, you should see both x86_64 and arm64.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文