ubuntu14.04LTS编译MUDOS v22.2b14
简单的编译步骤:
(1)运行./build.MudOS
(2)vim socket_efuns.c
o 修改Ln:1198的代码为
addr_in = (local ? &lpc_socks[fd].l_addr : &lpc_socks[fd].r_addr);
(3)make
(4)第三步执行之后的最后一行会出现:
英文系统:make: *** No rule to make target `obj/malloc.o', needed by `driver'. Stop.
中文系统:make: *** 没有规则可以创建“driver”需要的目标“obj/malloc.o”。 停止。
解决方法:
原封不动再次make即可。详细可参考连接:http://bluesock.org/~willg/blog/dev/mudos_under_ubuntu.html。
到此编译已经完成,下面进行安装。
(5)make install 不会出错。
-----------下面的还没有尝试,仅修改如上的内容就能编译了,即下面的选项是可选的------------
下面几个文件添加stdlib.h去掉一些警告(找不到exit()之类的)
vi edit_source.c
添加 #include <stdlib.h>
vi preprocess.c
添加 #include <stdlib.h>
vi make_finc.y
添加 #include <stdlib.h>
修改一下option.h文件兼容老的lib
vi options.h
添加巫师的功能
修改 Ln:225 #undef NO_WIZARDS
采用老的lpc语法(关于nosave - static之类的)
修改 Ln:266 #undef SENSIBLE_MODIFIERS
启用driver 的权限机制
修改 Ln:659 #define PACKAGE_UIDS
创建三个文件、否则会找不到 malloc.c 目标啥的
touch malloc.c
touch mallocwrapper.c
touch applies_table.c
* 需要新建的三个文件是在make过程生成的,由于ubuntu下的make工具似乎不能识别make过程中的
文件,所以需要新建三个空白文件,这样在make开始的时候就会识别到,当然在make过程中会复写这三个文件
数据库部分、拷自nt2的driver 、(特此声明)
由于以前的数据库api太老connect换成real_connect之类的
添加数据库部分
option.h修改下列配置
#define PACKAGE_DB
#ifdef PACKAGE_DB
#undef USE_MSQL /* MiniSQL, it's small; it's free */
#define USE_MYSQL 2 /* MySQL, bigger; it's free */
#define DEFAULT_DB USE_MYSQL /* default database */
#endif
修改 db.h 头文件:
将 24 行至 37 行注释掉,紧接着写上你自己的 MySQL 头文件的位置,
例如在 /usr/local/mysql/include/mysql.h
就写上:
#include "/usr/local/mysql/include/mysql.h"
在源代码目录里的 system_libs 文件里加上 mysql 连接库的位置,
例如在 /usr/local/mysql/lib
就加上:
-L/usr/local/mysql/lib -lmysqlclient
编译好的diver可能会遇到count(*)返零的问题
MySQL_fetch对数据类型进行判断时、不包含Count(*)的数据类型
最后default赋值为零
[font=楷体_gb2312;] count(*)返回的数据了类型为FIELD_TYPE_LONGLONG[font=楷体_gb2312;]
在db.c 650行左右添加[font=楷体_gb2312;] case FIELD_TYPE_LONGLONG:如下
switch (field->type) {
case FIELD_TYPE_TINY:
case FIELD_TYPE_SHORT:
case FIELD_TYPE_DECIMAL:
case FIELD_TYPE_LONG:
case FIELD_TYPE_LONGLONG:
v->item.type = T_NUMBER;
v->item.u.number = atoi(target_row);
break;
case FIELD_TYPE_FLOAT:
case FIELD_TYPE_DOUBLE:
v->item.type = T_REAL;
v->item.u.real = atof(target_row);
break;
case FIELD_TYPE_TINY_BLOB:
case FIELD_TYPE_MEDIUM_BLOB:
case FIELD_TYPE_LONG_BLOB:
case FIELD_TYPE_BLOB:
case FIELD_TYPE_STRING:
case FIELD_TYPE_VAR_STRING:
if (field->flags & BINARY_FLAG) {
#ifndef NO_BUFFER_TYPE
v->item.type = T_BUFFER;
v->item.u.buf = allocate_buffer(field->length);
write_buffer(v->item.u.buf, 0, target_row, field->length);
#else
v->item = const0u;
#endif
} else {
v->item.type = T_STRING;
if (target_row) {
v->item.subtype = STRING_MALLOC;
v->item.u.string = string_copy(target_row, "MySQL_fetch");
} else {
v->item.subtype = STRING_CONSTANT;
v->item.u.string = "";
}
}
break;
default:
v->item = const0u;
break;
}
最后是time()不跑的问题
在driver里面,有个变量current_time标示时间
每次心跳时、会current_time++
心跳的触发要看backend.c 186行左右 heart_beat_flag的标志变量
heart_beat_flag为1才会出发
heart_beat_flag 置1、是通过
backend.c-> call_haert_beat()
391行左右
signal(SIGALRM, sigalrm_handler);
ualarm(HEARTBEAT_INTERVAL, 0);
到时触发函数sigalrm_handler()heart_beat_flag 置1
在v22.2b14中ualarm没有调用成功、没有设置时钟、就不触发函数sigalrm_handler()
心跳会停掉
原因是ualarm.c文件#include "std.h"放的位置不正确
因为 #ifndef HAS_UALARM 且 std.h里定义了HAS_UALARM 所以放到 #ifndef HAS_UALARM前
就不会编译ualarm.c文件、就掉不到ualarm()
应该将#include "std.h"放到 #ifndef HAS_UALARM 之后
ubuntu14.04LTS编译MUDOS v22.2b14的更多相关文章
- Ubuntu14.04LTS下使用eclipse搭建Cocos2d-x的Android环境
from://http://www.58player.com/blog-2534-94136.html 最近想玩玩游戏制作,于是选择了目前流行的游戏引擎Cocos2d-x,这个东西虽然有Android ...
- ubuntu14.04LTS安装vmware10.0.1
因为所用Ubuntu系统是32位,而VMware最新版本又不支持32位,只好下载以前版本vmware10.0.1. vmware10.0.1下载地址: http://down.it168.com/1 ...
- Ubuntu14.04编译安装mysql5.6.26
Ubuntu14.04编译安装mysql5.6.26 (1)安装编译源码需要的包 sudo apt-get install make cmake gcc g++ bison libncurses5-d ...
- ubuntu14.04LTS更新源
这两天一直在使用Linux系统做一些事情,但是又会有特别多的报错,其中有一个问题就是源的问题,我知道有太多太多的人写这个源更新的帖子,我现在也写一篇关于源更新的帖子,只是针对ubuntu14.04LT ...
- Thinkpad W520 完美安装Ubuntu14.04LTS
Thinkpad W520 完美安装Ubuntu14.04LTS Ubuntu已经升级到14.04LTS,这是个长期支持的版本号.自从上次安装12.04LTS之后一直没有升级. 于是从站点上下载Ubu ...
- ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS)
ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS) 1. 网站资源: ROSwiki官网:http://wiki.ros.org/cn GitHub ...
- win7下安装ubuntu14.04lts 双系统
首先,在win7下的硬盘管理 压缩出一块空闲的分区,即压缩卷之后,不做任何操作. 并且确保该空闲卷是“基本”类型 不是的话,参考http://www.jianshu.com/p/2f07312 ...
- Ubuntu14.04LTS下 JAVA+HADOOP
首先在虚拟机中安装了Ubuntu14.04LTS 前期工作: 更新源.更新安装vim.安装vmtools工具.安装中文输入法 sudo apt-get update sudo apt-get inst ...
- ubuntu14.04 编译安装highpoint rocketraid 2720驱动
highpoint官方只有ubuntu12.10驱动,对于ubuntu14.04或者12.04,需要手工编译安装驱动. 基本步骤: 1.下载rocketraid 2720驱动源代码 2.在一台装有ub ...
随机推荐
- iOS Error
1),'libxml/tree.h' file not found Solution: 1. 导入libxml2.dylib 包 2.设置Header Search Paths 为 /usr/inc ...
- 原来MySQl就是这样工作的!
一.MySQL简单介绍 MySQL是当今最流行的开源数据库管理系统,超过10亿的下载量足可以证明这点.MySQL以其速度.高可靠性.简单易用,广泛应用,一些大型企业也在逐渐应用,如:Faceb ...
- php 中的常量
1.__FINE__ 返回当前常量所在的行号. 2.__FILE__ 返回文件的完整路径和文件名. 3.__FUNCTION__ 返回函数名称. 4.__CLASS__ 返回类名称. 5.__METH ...
- ARM处理器的寄存器
在ARM体系中通常有以下3种方式控制程序的执行流程: **在正常执行过程中,每执行一条ARM指令,程序计数器(PC)的值加4个字节:每执行一条Thumb指令,程序计数器寄存器(PC)加2个字节.整个过 ...
- jQuery学习笔记整理
一.子元素选择器.:nth-child:匹配父元素下的第N个子或者奇偶元素.注意:序号是从1开始的,而eq是从0开始计数的!它匹配的是前方选择器选择到的元素的父元素下面的第几个元素.例如:ul li: ...
- Windows下安装postgresql_psycopg2时出现 "Unabled to find vcvarsall.bat" 的解决办法
使用django时会用到postgresql的数据库,如下表: 数据库引擎设置 设置 数据库 适配器 postgresql PostgreSQL psycopg 版本 1.x, http://www. ...
- c++ *.h和*.cpp在编译中的作用
首先,我们可以将所有东西都放在一个.cpp文件内.然后编译器就将这个.cpp编译成.obj,obj是什么东西?就是编译单元了. 一个程序,可以由一个编译单元组成,也可以有多个编译单元组成. 如果你不想 ...
- 解决maven的报错
昨晚用Mars版本建maven工程,测试springboot,一路很顺畅,没有啥阻碍. 今天换了台机器,结果就不好用了,建完maven工程后,pom文件报错,该生成的代码结构也没有,更别提jar包了. ...
- Authentication和Authorization的区别
搞不太清楚Authentication和Authorization的区别,在网上搜了一下,lucky16的一篇文章讲的通俗,看了就懂,记录下来: 你要登机,你需要出示你的身份证和机票,身份证是为了证明 ...
- 横向滑动的HorizontalListView滑动指定位置的解决方法
项目中用到了自定义横向滑动的控件:HorizontalListView,点击其中一项,跳转到另外一个大图界面,大图界面也是HorizontalListView,想使用setSelection方法设定 ...