最近在折腾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)中的配置、调试、运行的更多相关文章

  1. 方便mac os 10.9系统中phpstorm配置php运行环境

    自己安装php,不用mac安装,这样就有php开发环境了. 安装很简单,直接运行一个命令, 需要几分钟,请慢慢等待. curl -s http://php-osx.liip.ch/install.sh ...

  2. Struts 2.5.20 在Eclipse IDE中的配置和开发实例

    零.参考博客1.Struts框架入门教程2.Struts 2.5.10.1配置 3.eclipse中搭建Struts2.5.16 4.Struts2.5+eclipse+tomcat8.5配置 注意: ...

  3. Eclipse/Myeclipse中查看和调试JDK源代码的方法

    看过这篇文章后,实践写的 http://blog.csdn.net/qq_27857857/article/details/71250401 一共做了以下几部: 第一步: 第二步: 一直next,到第 ...

  4. vue-cli中webpack配置解析

    版本号 vue-cli 2.8.1 (终端通过vue -V 可查看) vue 2.2.2 webpack 2.2.1 目录结构 ├── README.md ├── build │ ├── build. ...

  5. Eclipse中安装配置Tomcat

    Eclipse(4.4.x及以上)中安装配置Tomcat 以下配置说明全部针对免安装版本 基于tomcat的安装目录和运行目录是可以不同的,本文都会进行说明 首先简单介绍一下tomcat的目录结构,一 ...

  6. Hadoop在eclipse中的配置

    在安装完linux下的hadoop框架,实现完所现有的wordCount程序,能够完美输出结果之后,我们开始来搭建在window下的eclipse的环境,进行相关程序的编写. 在网上有很多未编译版本, ...

  7. eclipse中tomcat配置(待完善)

    tomcat版本:apache-tomcat-6.0.29 项目结构:     一.新建server方式 二.eclipse tomcat plugin方式   tomcat plugin方式必须保证 ...

  8. Eclipse中应用的调试

    作为编程人员,程序的调试是一项基本功.在不使用IDE的时候,程序的调试多数是通过日志或者输入语句(System.out.println)的方式.可以把程序运行的轨迹或者程序运行过程中的状态显示给用户, ...

  9. git在eclipse中的配置 转载

    git在eclipse中的配置 转载 一_安装EGIT插件 http://download.eclipse.org/egit/updates/ 或者使用Eclipse Marketplace,搜索EG ...

随机推荐

  1. 在linux命令行下执行php 程序

    如何在linux命令行下,执行php程序. 例子 打印当前时间 php -r "echo time()" 随机输出一个数字 php -r "echo rand(1,20) ...

  2. JDI tutorial (trace example)

    Components Debugger Interfaces / |--------------| / | VM | debuggee ----( |--------------| <----- ...

  3. [Kerberos] Kerberos 认证过程整理

    Kerberos是一种安全认证协议,意在提供 more secure authentication simplified management of password convenience of s ...

  4. XHTML的规则

    以正确的DOCTYPE和命名空间开始文档 使用meta内容元素声明你的字符编码 用小写字母写所有元素和属性名称 给所有属性值加引号 给所有属性赋一个值 关闭所有标签 用空格和斜杠关闭“空”标签 不要在 ...

  5. Linux 执行文件查找命令 which 详解

    某个文件不知道放在哪里了,通常可以使用下面的一些命令来查找: which  查看可执行文件的位置 whereis 查看文件的位置 locate   配合数据库查看文件位置 find   实际搜寻硬盘查 ...

  6. 【Alpha】Daily Scrum Meeting第五次

    一.本次Daily Scrum Meeting主要内容 每个人学习情况 任务安排 界面设计问题,怎样让界面更好看? 二.任务安排 学号尾数 昨天做的任务 今天的任务 明天的任务 612 时间轴控件优化 ...

  7. 1.1ASP.NET Web API 2入门

    HTTP 不只是为了生成 web 页面.它也是建立公开服务和数据的 Api 的强大平台.HTTP 是简单的. 灵活的和无处不在.你能想到的几乎任何平台有 HTTP 库,因此,HTTP 服务可以达到范围 ...

  8. 多线程更新UITableView时容易导致的问题

    我请求同一个接口两次, 第一次是那缓存, 第二次是那网络数据在请求成功回调的主线程异步的, 先赋值数据源, 然后调用uitableview reloaddata的方法, 这时候问题来了 reloadd ...

  9. Caffe学习系列(17): caffe源码分析 vector<Blob<Dtype>*>& bottom(转)

    转自:http://blog.csdn.net/qq_14975217/article/details/51524042 Blob:4个维度 n x c x h x w: bottom[0] .bot ...

  10. Python简单源码解析

    主要为一些简单的源代码的解析以及一些方法的理解. 说明:这些文件都不是我写的,详情可参考Github上的内容. 批量修改文件类型 def batch_rename(work_dir, old_ext, ...