2013-10-19 60 views
0

在我的Erlang應用程序中,我想使用外部庫(erlzmq2)。我是erlang的新手,不知道如何打包或編譯它。目前我正在使用rebar進行編譯,如果答案是基於編輯rebar.config文件,那對我來說會更有用。在erlang應用程序中使用外部庫

回答

5

幸運的是,您的圖書館似乎螺紋鋼包裝,因爲它有其回購的根rebar.confighttps://github.com/zeromq/erlzmq2

假設你有沒有依賴性配置的是,你只是添加到您的自己rebar.config

{deps, [ 
    {erlzmq2, "2.*", {git, "git://github.com/zeromq/erlzmq2", {tag, "2.1.11"}}} 
]}. 

這個工程中添加 「2.1.11」 發佈。你也可以只對着幹頭:

{deps, [ 
    {erlzmq2, "3.*", {git, "git://github.com/zeromq/erlzmq2"}} 
]}. 

一個 「DEPS」 項的格式是

  • 應用程序的名稱,在其x.app文件(erlzmq2.app.src line 1
  • A觀察正則表達式匹配其x.app文件(erlzmq2.app.src, line 4)中的「vsn」。如果你想繞過這個完整性檢查,你可以使用「。*」。
  • 給出可從中獲取依賴關係的位置的元組。在git的情況下,除了URL之外,還可以給它一個branchtag元組。

包裝了鋼筋和Reltool您的應用程序是一個全新的問題,我想,而且是複雜的。但是如果你的應用程序相當小/一次性/非正式的,你可以嘗試使用Rebar的「escriptize」命令。

如果您的應用程序是「foo」,則需要在src中有foo.erl,該文件具有合適的main/1。然後添加到您的rebar.config

{escript_incl_apps, [erlzmq2]}. 

,並在命令行(讓代表和編譯後),運行

螺紋鋼escriptize

螺紋鋼將東西你所有的二進制文件和那些將「encrypt_incl_apps」轉換爲作爲可執行文件運行的單個文件。

+0

當庫位於本地文件系統中時,第三個字段(元組)是什麼?是/ lib /。放置外部庫的理想位置? –

+0

你做了本地修改嗎?你是否在一個系統中有1k磁盤空間是珍貴的?你在沒有網絡訪問的系統上?如果這些都不是這種情況,我建議使用參考遠程庫的標準鋼筋練習。 –

+0

好吧我會用標準的參考做法。我能夠用我的應用程序成功構建erlzmq。但是當我在我的代碼中引用它時,例如「Context = erlzmq:context()」,它會通過抱怨'模塊無法加載'而終止。我懷疑這是一些聯繫問題,你有什麼想法如何正確運行? –

0

有關更多其他信息,可以創建一個名爲lib的獨立文件夾,並將lib路徑導出到ERL_LIBS(如果這不是螺紋鋼兼容的)。如果庫足夠好,可以將其放在OTP lib目錄中,但這不是推薦的!

相關問題