ejabberd 在eclipse(erlide)中的配置、調試、運行

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   ar   for   檔案   

最近在折騰ejabberd,將ejabberd項目配置到eclipse中進行編譯、調試等,現在將過程記下來,希望能協助到需要的人。

準備

  1. 本次環境是在linux中進行,博主的linux是fedora20.
  2. 安裝erlang 
  3. 安裝eclipse
  4. 安裝eclipse外掛程式:erlide
  5. 以上安裝過程請自行搜尋相關教程,本文略。

  下面我們就把將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)中的配置、調試、運行

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.