Ich möchte in der Lage sein, in F# geschriebenen Code auf einem Linux-System (Debian) auszuführen, aber es ist unwahrscheinlich, dass ich in der Lage sein, Mono auf ihm zu installieren. Gibt es eine Möglichkeit, die F# zu kompilieren, um vollständig statisch zu sein und haben absolut keine Abhängigkeiten von Mono? Im Grunde nur am Ende mit einer ausführbaren Binärdatei, die ich genau wie jede andere Linux-Binärdatei ausführen könnte?
Antworten
Zu viele Anzeigen?Selbst mit einem abgespeckten Account können Sie Ihre eigene Version von Mono kompilieren - das ist nicht besonders schwer, siehe http://www.mono-project.com/Compiling_Mono . Es gibt ein paar Abhängigkeiten, aber die sind nicht schwer zu finden. Sie müssen allerdings die meisten Ihrer Aufrufe mit mono einleiten, wie mono myapp.exe
statt ./myapp.exe
試してみる AOT . Aber seien Sie sich seiner Grenzen bewusst.
Aktualisierung:
Ich glaube, ich habe mich etwas zu schnell auf eine Antwort gestürzt und bin nicht tief genug eingetaucht, um sie in etwas Nützliches zu verwandeln. AOT kompiliert Code in gemeinsam genutzte Bibliotheken vor, unter den richtigen Bedingungen kann dies die Leistung erhöhen.
Wenn Sie jedoch die Anforderung haben, die Mono-Laufzeitumgebung überhaupt nicht auf dem Client-Rechner zu installieren (warum?), sollten Sie versuchen mkbundle / mkbundle2 . Dies erzeugt eine riesige, in sich geschlossene ausführbare Datei (C# Hello World + deps erzeugt eine Datei von etwa 2,5 MB auf meinem Rechner... Mit -z bekam ich etwa 900k). Sie können versuchen, es zu kombinieren mit Linker um ungenutzte Teile von Bibliotheken, von denen Ihre Anwendung abhängt, weiter zu entfernen.
Was Ihre zweite Frage betrifft, so erzeugt der F#-Compiler CIL wie jeder andere .NET-Compiler. Es sollte also keine Rolle spielen. Wenn Ihre Anwendung jedoch entweder IL-Anweisungen enthält, die noch nicht vom mono AOT-Compiler unterstützt werden (z.B. benötigen Sie mkbundle2, um Generics zu handhaben) oder Abhängigkeiten zu externen verlinkten Bibliotheken, die Sie nicht auf Ihrer Debian-Box installieren können, haben Sie Pech. Sie werden wohl selbst ein wenig herumprobieren müssen.