2014-03-01 5 views
12

Ich möchte Haskell Code entwickeln, der auf Windows läuft und mit Windows OS APIs interagiert, aber ich würde es gerne auf einem Linux-Rechner machen. Wie erreiche ich das? Ich kann auf einem Windows-Rechner kompilieren und das funktioniert, aber nicht auf einem Linux-Rechner. Haskell kann ein LLVM-Backend verwenden, oder? Kann ich LLVM verwenden, um dies zu erreichen? Oder irgendwie mit MinGW arbeiten?Wie kompiliere ich ein Haskell-Programm auf einem Linux-Rechner mit einem Windows (PE) -Ziel kompilieren?

Antwort

7

Ich habe viele Möglichkeiten ausprobiert, einschließlich GHC auf Wine (funktionierte nicht für mich, trotz vieler Hinweise Werbung, dass es funktioniert "out of the box").

Für Cross-Compilierung liegt ein Problem darin, dass GHC Ihre C-Bibliotheken und DLLs (für Windows) findet. Vorlage Haskell wird Ihnen auch Kopfschmerzen bereiten (weil es Linux-Bibliotheken laden muss, aber dann für Windows kompilieren).

Ich habe es nie geschafft, diese Probleme richtig zu umgehen.

Am Ende entschied ich mich für die Installation von GHC auf einer Windows-VM, und jetzt verwende ich ein Skript, um Zeug zu einem Repo zu schieben, eine Verbindung zum Windows-Rechner über SSH, ziehen, reinigen, neu kompilieren und testen, alles ausgeführt von ein Linux-CLI und geben mir Feedback über das, was unter Windows passiert.

EDIT: Ich gebe diese Antwort nicht in dem Versuch, jemanden davon abzuhalten, etwas klüger zu versuchen. Ich bin auch an einer echten Cross-Compilation interessiert und wenn jemand eine gute Lösung hat, bin ich ganz Ohr. Meine alternative Methode funktioniert immer, aber es ist wirklich ein Schmerz, eine VM nur dafür zu starten. Darüber hinaus erfordert es die Verwendung einer VM pro Betriebssystem pro Architektur, was ziemlich schwer ist.

+0

Haben Sie in MINGW geschaut? – CMCDragonkai

+0

Sicher. Keine Hilfe dort. –

+0

Es ist schon lange her, aber ich bin immer noch daran interessiert, dieses Problem anzugehen. Mehrere Optionen kommen in den Sinn, von Wein bis ReacOS. Es könnte sich lohnen, sie neu zu bewerten. Wenn jemand eine gute Lösung vorschlagen kann, würde es sehr geschätzt werden. Während ich möglicherweise keine Zeit habe, die Lösung selbst zu erstellen, sollte ich Zeit haben, es zu versuchen, wenn das Setup trivial/automatisiert ist. Ich benutze das in der Produktion, also wäre es ein kleiner, aber anständiger Testfall. –