標籤:style blog http color io os ar for 檔案
最近在折騰ejabberd,將ejabberd項目配置到eclipse中進行編譯、調試等,現在將過程記下來,希望能協助到需要的人。
準備
- 本次環境是在linux中進行,博主的linux是fedora20.
- 安裝erlang
- 安裝eclipse
- 安裝eclipse外掛程式:erlide
- 以上安裝過程請自行搜尋相關教程,本文略。
下面我們就把將ejaberd匯入eclipse過程中所遇到的問題各個擊破。
下載ejabberd項目原始碼,將整個工程匯入到eclipse中,怎麼導就別問我啦!然後就是慘不忍睹的各種錯誤:
- -include_lib("p1_xml/include/xml.hrl").錯誤
- 凡是用到xml模組的地方都是錯誤,例如 類似 presence :: {binary(), xmlel()} ——type xmlel() undefined錯誤,該錯誤系include 相關庫失敗導致
改錯誤是因為項目中引用了process-one的一些基礎設施或者說工具模組:
- esip
- goldrush
- lager——用於錯誤日至的格式化輸出
- p1_cache_tab
- ...
解決方案如下:
在ejabberd的原始碼檔案夾根目錄下,終端中運行:
./rebar get-deps
這會下載所需的工具模組,放在deps檔案夾下
然後編譯工具庫:
./rebar compile
工具庫就編譯成能在erlang環境啟動並執行模組,很多模組都是用 application behaviour編寫的,在ejabberd中會見到很多形如:application:start(app名稱).這樣的代碼,啟動工具應用程式。
下載編譯好之後將deps目錄下的所有檔案複製到你系統中的erlang所在的lib檔案夾下,如我的系統用如下命令:
sudo cp -R ./deps/* /usr/local/lib/erlang/lib/
請將目標目錄替換成自己系統中的目錄,這樣erlang就能用這些應用和模組了,include_lib語句也happy了。
解決了上面的問題之後還有一個大問題:找不到XmppAddr.hrl檔案!!!
XmppAddr.hrl需要從XmppAddr.asn1中產生,這個檔案在原始碼檔案夾下的asn1檔案夾裡面,用erlang的編譯工具能夠將其編譯成.hrl檔案。具體請參見:http://www.erlang.org/doc/apps/asn1/asn1_ug.html,這裡從略。我可以貼出我產生的檔案如下:
%% Generated by the Erlang ASN.1 compiler version:3.0.1%% Purpose: Erlang record definitions for each named and unnamed%% SEQUENCE and SET, and macro definitions for each value%% definition,in module XmppAddr-ifndef(_XMPPADDR_HRL_).-define(_XMPPADDR_HRL_, true).-define(‘id-on-xmppAddr‘, {1,3,6,1,5,5,7,8,5}).-endif. %% _XMPPADDR_HRL_
將以上內容命名為XmppAddr.hrl並拷貝到ejabberd項目include檔案夾下。
最後eclipse所選擇的erlang runtime 要和之前編譯工具庫的一樣,不然同樣無法運行,設定辦法如下:
在菜單中 : Window/Prefrences/Erlang/Installed runtimes 中勾選對應的runtime。
經過以上之後ejabberd就能在eclipse中編譯了,但是距離跑起來還有很大的差距。
ejabberd.app 檔案缺失,解決方案是將src檔案夾下的ejabberd.app.src.in檔案 改名為ejabberd.app放入編譯輸入目錄,即.beam檔案目錄,也即ebin檔案夾下。
此時如果分步啟動並執行話可以運行許多啟動代碼,但估計程式會找不到 設定檔而終止,這些請自己跟蹤代碼,自自行修改制定,並重新編譯即可。
ejabberd啟動方式:在elipse的console中(已進入erlang命令列)運行:
erjabberd:start(). %%這個是ejabberd的入口!
大致如此,有問題請隨時提問。
ejabberd 在eclipse(erlide)中的配置、調試、運行