代码之家  ›  专栏  ›  技术社区  ›  clemp6r

使用Electron Builder构建macOS跨体系结构时会出现“mach-o文件,但是不兼容的体系结构”运行时错误

  •  0
  • clemp6r  · 技术社区  · 1 年前

    我有一个Electron应用程序 Electron Builder 适用于macOS和Windows。

    目前,对于macos,我们的应用程序仅为x64目标构建(在英特尔机器上),然后推送到S3进行自动更新。现在我想为arm64和x64 macos目标构建应用程序(注意:我现在不想做一个通用的应用程序)。

    我为Electron Builder添加了以下配置:

        ...
        target: {
          target: 'default',
          arch: [
            'x64',
            'arm64'
          ]
        },
        ...
    

    当我在Intel(x64)机器上进行构建,然后尝试在Apple Silicon机器上运行arm64应用程序时,我会收到以下错误:

    mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')
    

    此外,如果我在苹果硅机器上进行构建,并尝试在同一台机器上运行英特尔版本(使用罗塞塔),我会得到以下信息:

    mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')
    

    唯一可行的方法是在英特尔机器上构建一个英特尔应用程序,然后在苹果硅机器上构建arm64应用程序。但是,这不是一个选项,因为我需要发布 latest.yml 引用两者,如果我从不同的机器进行两次不同的发布(最新的一次覆盖前一次的yaml文件),情况就不是这样了。

    我试着添加 buildDependenciesFromSource: true 到配置根目录(如中所述 #7349 #6623 )但没有成功。

    请注意,我们的应用程序使用内部(专有)本机节点库。如果我从项目中删除这个本机节点库及其用法,一切似乎都很好。

    有什么想法吗?

    附言:我还创建了一个 issue 在Github上,因为我不确定这是Electron Builder中的错误还是我这边的问题。

    1 回复  |  直到 1 年前
        1
  •  0
  •   clemp6r    1 年前

    这是由于 electron-vite 它复制了图书馆的一个过时版本。我刚刚在电子黄配置中添加了这个:

    {
      main: {
        ...
        build: {
          rollupOptions: { external: ["my-native-lib"] },
        },
      },
      ...
      },
    }