【问题标题】:How to build a Go app that can cross-macOS-version?如何构建一个可以跨 macOS 版本的 Go 应用程序?
【发布时间】:2021-09-07 18:11:27
【问题描述】:

这是我最近创建的 macOS 应用程序:https://github.com/evillt/macmineable-release
这是我面临的问题:https://github.com/evillt/macmineable-release/issues/18

我在我的机器上构建了应用程序,它可以在任何 BigSur 设备上正常运行,甚至是 M1 设备,但不能在 Catalina(10.15) 上运行。

所以我想要构建一个可以在单个应用程序上运行多个 macOS 版本的版本。

非常感谢您的任何建议!

更新

我的设备是 MacBook Pro 2015,Intel I5 芯片,Big Sur 11.5.2。

我在我的设备上构建了这个应用程序,它可以正常运行:

  • 我的设备
  • MacBook 12 英寸 Big Sur 11.0
  • 其他 M1 设备(Big Sur 11.0 或更高版本)

但无法在 MacBook Pro Intel I7 Catalina 10.15.7 上运行。问题here

这就是我所知道的。

【问题讨论】:

    标签: macos go macos-catalina macos-big-sur


    【解决方案1】:

    您需要在构建期间更改 CC compile go 使用。

     go env CC
    
     clang
    

    最有可能使用/usr/bin/clang中的版本

    如果您安装了 Xcode - 或者实际上只是 Command Line Tools,您可以看到最近几个主要版本的各种版本,例如:

    $ find  /Library/Developer/CommandLineTools -name clang
    
    /Library/Developer/CommandLineTools/usr/bin/clang
    /Library/Developer/CommandLineTools/usr/lib/clang
    /Library/Developer/CommandLineTools/usr/lib/swift/clang
    /Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/A/lib/clang
    /Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang
    /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/A/lib/clang
    /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang
    /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/A/lib/clang
    /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang
    

    因此,要针对 MaxOSX10.15 等较旧的 SDK 进行构建,请将 CC 设置为您的 go build 所需的显式版本,如下所示:

    CC=/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang go build
    

    【讨论】:

    • 谢谢,但我得到了permission deniedcgo: C compiler "/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang" not found: exec: "/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/OpenCL.framework/Versions/A/lib/clang": permission denied
    • 错误显示二进制文件丢失。您是否运行了find 命令?它将显示可用的替代clang 二进制文件。您还需要确保安装了开发人员命令行工具(Xcode IDE 提供的选项)。
    • 是的,我已经安装了command line tools。运行find 有类似的输出。
    • 尝试直接运行clang 工具。权限被拒绝错误表明它的权限位未设置为“可执行”,或者您的用户帐户可能无法访问中间路径?
    • 运行 clangerror: no input files 。我是 Go 新手,所以我不知道问题到底出在哪里。
    【解决方案2】:

    我在构建 Unix 可执行文件和打包为 Mac 应用程序方面拥有丰富的经验,方法是使用位于 https://medium.com/@mattholt/packaging-a-go-application-for-macos-f7084b00f6b5

    build Unix exec file
    go build -o bin/{program} {program}
    

    在 macOS (Big Sur) 上打包应用并在 macOS (High Sierra) 上安装成功。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2018-08-12
      相关资源
      最近更新 更多