在Mac上编译Swift并在Windows上运行

时间:2017-03-26 18:51:29

标签: swift windows macos cross-compiling

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

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

2 个答案:

答案 0 :(得分:3)

如果你有一个适用于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端口(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并命名为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中的目录并运行它。

  7. 祝你好运。感谢。

答案 1 :(得分:1)

如果要在Windows上运行Swift代码,最接近的是swift-windows。我从来没有使用过它,但看起来你可以将Swift 3.0代码编译成Windows可执行文件。

要下载预建的二进制文件,请尝试this link。它需要Windows 10 64位和Visual Studio 2015 SDK。此外,您必须拥有一个cygwin或mingw环境。