2009-11-25 135 views
23

有沒有辦法將Erlang編譯爲獨立的可執行文件? 這意味着,要在沒有Erlang運行時的情況下將其作爲exe運行。Erlang編譯 - Erlang獨立執行

+0

鏈接到的站點不支持exes – Zubair 2010-04-05 17:52:46

+0

@qwerty。你找到了最終有效的答案嗎? – Zubair 2010-04-05 17:54:02

回答

14

儘管可以將所有東西都包裝在一個EXE中,但您不會擺脫Erlang運行時。像Erlang這樣的動態語言不能真正編譯爲本機x86代碼,例如,由於它們的性質。在那裏必須有一名翻譯。

可以想出一個方案,將解釋器和所有BEAM文件捆綁到一個可以雙擊並直接運行的EXE中,但這可能比您想要的更多。我以前看過它,但很少有很好的理由去做,所以我不打算詳細介紹這裏的技術。

相反,我建議您使用它們分別用於Python的py2exe和py2app程序的相同技術來創建Windows和Mac OS X可執行文件。這些程序將程序的主要模塊加載到Python解釋器中,使用語言的內置反射機制找出它需要的其他模塊,然後寫出所有這些已編譯的模塊以及語言解釋器的副本和一個小封裝程序與口譯員一起啓動了程序的主要模塊。包含這些文件的目錄是一個獨立的環境,擁有運行該程序所需的一切。 Erlang的唯一區別是python.exe變成了erl.exe,而* .pyc變成了* .beam。基本的想法仍然是一樣的。

如果你不需要它來處理任何Erlang程序,但只有你自己,你可以簡化它。在這種情況下,您只需將構成程序的Erlang解釋器和所有.beam文件複製到一個目錄中即可。例如,你可以使你的程序的Makefile的這一部分。

然後,您可以使用自己喜歡的SETUP.EXE或MSI創建方法,用於創建一個分發包,安裝這個集合文件到c:\Program Files\MyProgram最終用戶的系統上,並在其開始菜單創建「ERL mainmodule.beam」的快捷方式。最終用戶不關心作爲程序的一部分,他們也得到一份Erlang的副本。這是一個實現細節。

+9

我只是對此做了一個簡單的攻擊,看起來你可以將Erlang運行時降低到2 MB以下。您需要的僅僅是安裝Erlang的目錄下erts-VERSION/bin目錄中的文件的子集。我看到只能使用beam.smp.dll,epmd.exe,erl.exe,erl的東西。 ini,erlexec.dll,erlsrv.exe和heart.exe。其中一些似乎是可選的。我不知道它是如何猶太教只發運beam.smp.dll而不是beam.dll,反之亦然;你可能真的需要兩個。這會使您最多解壓縮3 MB。小,這些天。 – 2009-11-25 16:58:07

+1

Riak不會作爲應用程序捆綁嗎? – CMCDragonkai 2014-08-03 23:42:33