【问题标题】:How to run an EXE file compiled from a F# source on the Mac Terminal?如何在 Mac 终端上运行从 F# 源编译的 EXE 文件?
【发布时间】:2023-03-17 03:22:01
【问题描述】:

我在 F# 中有一个 hello world 程序。

open System

[<EntryPoint>]
let main argv =
    printfn "Hello World from F#!"
    0 // return an integer exit code%

在 Mac OS 上,我可以用“fsharpc”编译它,它会生成两个文件

FSharp.Core.dll hello.exe

EXE 文件在 Mac 上看起来很奇怪。但是我怎样才能从命令行执行它,而不使用项目结构(因为它看起来有点矫枉过正),就像这里解释的那样:https://dotnet.microsoft.com/learn/languages/fsharp-hello-world-tutorial/create

实际上,如果我运行“dotnet hello.exe”,我会收到此错误:

遇到致命错误。库“libhostpolicy.dylib” 未找到执行应用程序所需的 '/用户/zell/你好/'。无法作为独立应用程序运行。如果这 应该是依赖于框架的应用程序,添加 /Users/zell/hello/hello.runtimeconfig.json 文件指定 合适的框架。

【问题讨论】:

  • 你试过dotnet hello.exe吗?
  • 您也可以将其构建为独立的 exe 并对其进行修剪以减小大小。 dotnet publish -r win-x86 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true 用于 Windows,并将 win-x86 替换为 osx-x64(我认为)。
  • @FyodorSoikin 谢谢!但是那个我已经试过了。查看我更新的问题:-)
  • 你不应该用 fsharpc 编译它,而是用 dotnet CLI 工具编译它。或者,因为它似乎是一个完整的框架应用程序,所以使用 mono hello.exe 来运行它。
  • @s952163 谢谢。如何用dotnet CLI工具编译?

标签: command-line f#


【解决方案1】:

您可以像这样创建和构建/运行 F# 应用程序:

dotnet new console -lang F# -o SomeDirectory && cd SomeDirectory
dotnet run

在不运行的情况下构建它是:

dotnet build

您可以在此处查看所有命令的参考:https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet

您似乎安装了 Mono,这是 fsharpc 的来源。我不建议使用它,除非您使用 Xamarin 进行移动开发,目前需要 Mono。

【讨论】:

  • 非常感谢!但是,如果我已经有一些 f# 文件要运行怎么办。您在上面显示的命令适用于名为 Program.fs 的程序,但我的文件名为 file1.fs、file2.fs 等,例如。有没有办法像使用 gcc 一样编译和运行程序?
  • 在 .NET 中,您可以按照它们的依赖顺序将它们添加到项目文件 (.fsproj) 中。然后就是dotnet build/dotnet run/etc。
【解决方案2】:

通过反复试验,我发现要运行我的新 .exe 文件,我需要在同一文件夹中使用相同的无扩展名的 .runtimeconfig.json 文件,即 hello.runtimeconfig.json

{
  "runtimeOptions": {
    "tfm": "net5.0",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "5.0.0"
    }
  }
}

那么dotnet hello.exe 就可以了。

【讨论】:

    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    相关资源
    最近更新 更多