swift - 在 Mac 上编译 Swift 在 Windows 上运行

标签 swift windows macos cross-compiling

如何将 Mac 上的 swift 文件编译为可执行文件以在 Windows 上运行?

我只需要一个可以从 C# 代码调用的可执行文件。

最佳答案

如果您有适合 Windows 的 swift 库模块,您的 macOS swift 编译器可以为 Windows 生成目标文件,例如 Hello.obj。 此外,如果您有适用于 Windows 的特殊链接器和一些 C/C++ 运行时目标文件,则可以构建可执行文件(例如 Hello.exe)。

您只需要以下内容即可。

  1. 将 Windows 包中的目录复制到 macOS。

    1) 在 Windows 上安装 Swift for Windows ver-1.5 ( https://swiftforwindows.codeplex.com )

    2) 从 Windows 复制目录到 macOS

     SwiftForWindows/Swift/lib/swift  // Swift library for Windows (MinGW)
     SwiftForWindows/Swift/lib/mingw  // C/C++ runtime object files (MinGW)
    
  2. 为 MacOS 安装 Swift 编译器 ( https://swift.org/builds/swift-3.0-release/xcode/swift-3.0-RELEASE/swift-3.0-RELEASE-osx.pkg )

    您应该为库模块和编译器使用相同的版本。使用版本 3.0。 Swift 3.0.1 或 3.1 不适用于 SwiftForWindows-1.5。

  3. 使用 Mac 端口安装 MinGW 链接器

    1) 安装 Mac Port (https://www.macports.org/install.php)

    2) $ sudo port install x86_64-w64-mingw32-binutils

    3) 创建目录bfd_ld并将/opt/local/bin/x86_64-w64-mingw32-ld和name复制到ld

     $ mkdir bfd_ld
     $ cp -p /opt/local/bin/x86_64-w64-mingw32-ld bfd_ld/ld
    
  4. 更多设置

    1) 在 macOS 中重命名目录

     mv SwiftForWindows/Swift/lib/swift/mingw SwiftForWindows/Swift/lib/swift/windows
    

    2)复制C运行时对象(3个文件)

     cp SwiftForWindows/Swift/lib/mingw/*.o bfd_ld
    
  5. 编译

     echo "print(Hello)" > Hello.swift
     ~/Library/Developer/Toolchains/swift-3.0-RELEASE.xctoolchain/usr/bin/swiftc -target x86_64-pc-windows-gnu -resource-dir SwiftForWindows/Swift/lib/swift -tools-directory bfd_ld  -L SwiftForWindows/Swift/lib/mingw -lswiftSwiftOnoneSupport -o Hello.exe Hello.swift 
    

    这将生成 Hello.exe。您可以忽略“警告:.drectve”消息。

  6. 运行

    可执行文件将需要目录“SwiftForWindows/My Programs”中的 DLL。

    将Hello.exe复制到Windows目录下运行

祝你好运。谢谢。

关于swift - 在 Mac 上编译 Swift 在 Windows 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43033106/

相关文章:

python - python -v 命令的作用

swift - 使用 Cocoa 从 NSGradient 获取 NSImage (macOS)

swift - 找不到“StartApp/StartApp.h”文件

ios - 无法在Xcode的CS193p项目的SwiftUI'文本'中推断通用类型'S'

c++ - 如何使用 WMI 更改 Win32_NetworkAdapter NetConnectionID 属性

linux - Windows 10 上的 Ubuntu 上的 Bash 是否支持 USB?

ruby - 在 OS X 上部署 Ruby-Tk 应用程序

ios - 创建无限滚动的背景

windows - 如何让 VSCode 编辑器停止滚动到文件底部?

c - 有什么方法可以检查文件系统在预处理器中是否不区分大小写?