应用程序根据启动方法报告不同的架构

问题描述 投票:0回答:2

我已经为 M1 Mac 制作了 Scilab 的本机构建(参见 https://www.utc.fr/~mottelet/scilab_for_macOS.html),该应用程序似乎在通过双击其图标启动时触发 Rosetta2,如下所示结果,其整体环境被错误地报告为 x86_64 而不是 arm64。例如,您可以从 Scilab 命令行启动 shell 命令并获取输出。例如

uname -m
产量

--> unix_g("uname -m")
 ans  =

  "x86_64

当 Scilab 从其图标启动或通过终端使用

open
启动时。

但是,当应用程序主脚本直接从终端启动时,即在此处键入

me@mac-M1 ~ % /Applications/scilab-branch-6.1.app/Contents/MacOS/scilab

Scilab 中的相同 unix 命令会产生预期结果,因为该应用程序是针对 arm64 架构编译的:

--> unix_g("uname -m")
 ans  =

  "arm64"

2021 年 1 月 6 日更新:

运行应用程序始终调用主

scilab
脚本(稍后调用实际的
scilab-bin
本机二进制文件)。双击应用程序后,通过
ps
获得的进程列表会产生

 501   643 ??         0:00.35 /bin/sh /Users/mottelet/Desktop/scilab-branch-6.1.app/Contents/MacOS/scilab
 501   708 ??         0:04.23 scilab-bin

活动监视器显示匹配的进程为:

正如您所猜测的,shell 的架构是错误的。我尝试过使用

<key>LSRequiresNativeExecution</key>
<true/>

Info.plist
但它不会改变任何东西。

这个问题如何调试?提供一个更紧凑的例子并不容易。如果读者中的一些专家可以帮助我,您只需下载 Scilab arm64 版本(请参阅上面的链接)并从 dmg 存档(经过 Apple 公证)获取该应用程序。首次运行时,Scilab 将下载本机 Java 8 JRE。感谢您的帮助和见解!

S.

macos scilab apple-m1 rosetta-2
2个回答
2
投票

我终于找到了这个解释@https://developer.apple.com/documentation/apple-silicon/building-a-universal-macos-binary

如果应用程序不包含可执行二进制文件,系统可能会在 Rosetta 翻译下运行它,作为预防措施,防止潜在的运行时问题。例如,系统在 Rosetta 翻译下运行仅脚本应用程序。如果您验证您的应用程序可以在 Apple 芯片和基于 Intel 的 Mac 计算机上正确运行,请将 LSArchitecturePriority 键添加到应用程序的 Info.plist 文件中,并首先列出 arm64 架构。

但是,在 Info.plist 中添加 LSRequiresNativeExecution 或 LSArchitecturePriority 不会改变任何内容。我以为我里面出了问题,但即使有这个最小的属性列表

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>LSArchitecturePriority</key>
    <array>
        <string>arm64</string>
    </array>
    <key>LSRequiresNativeExecution</key>
    <true/>
    <key>CFBundleExecutable</key>
    <string>scilab</string>
</dict>
</plist>

应用程序在 Rosetta 下启动。


0
投票

与问题相关,您还可以使用

arch
ARCHPREFERENCE
设置 arch 使用的“优先级列表”。例如:

# launch with arm64 if possible, or fall back to x86_64
ARCHPREFERENCE=arm64,x86_64 arch /Applications/scilab-branch-6.1.app/Contents/MacOS/scilab

文档:https://www.unix.com/man-page/osx/1/arch/#~:~ARCHPREFERENCE

© www.soinside.com 2019 - 2024. All rights reserved.