请选择 进入手机版 | 继续访问电脑版

Lazarus中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 9278|回复: 23

记录:Ubuntu 下用 Lazarus 开发 Linux 服务器程序

[复制链接]

该用户从未签到

发表于 2012-6-26 21:24:25 | 显示全部楼层 |阅读模式
N年前我用 Delphi 开发了一个即时聊天、视频会议的程序。登录用的服务器也是用 Delphi 写的,托管在电信机房。现在,服务器坏掉,拿回来一看,电源里的电容爆掉了。当然,我可以换掉电容,修好服务器。

问题是:这样的硬件维护的麻烦,说不定以后还会有。

另外,我同时在服务器上放了一些小圈子的户外论坛,让一些玩户外的朋友发贴玩。居然被警告有什么敏感词,最后被迫关掉论坛。

于是,俺设想:租国外的 VPS,上述那些麻烦应该不会有了吧?国外的 VPS,多是 LINUX 的。有 WINDOWS 的,但很贵。

于是,俺打算在虚拟机里安装 Ubuntu 然后在里面安装 Lazarus 把可以运行在 VPS 里面的通信服务器做出来。

于是,俺从这个帖子开始,逐步记录安装的过程。

评分

参与人数 1威望 +1 收起 理由
bugxiong + 1 持续关注中...

查看全部评分

回复

使用道具 举报

该用户从未签到

 楼主 发表于 2012-6-26 21:29:38 | 显示全部楼层
首先,是下载 Ubuntu。俺在其官网下载,好慢。有朋友提醒网易有镜像。于是GOOGLE到网易镜像的地址,选择了一个 CD 版的 ISO 来下载。下载完后,启动俺的 VitualBox,开始安装。

结果,居然启动后找不到引导介质!检查了下,俺设置了引导盘为光盘的,虚拟机的光盘也设置为这个 ISO 文件的。是不是那个 ISO 有问题?

于是还是摸到 Ubuntu 官网去下载。这次俺开个虚拟机,装一个 FlashGet 来下载,的确快了很多。下载完成,这个 ISO 还是不能引导。

再次检查虚拟机的设置,俺发现俺把虚拟的光盘挂在 SATA 底下了。改为挂在 IDE 控制器底下,引导成功。开始 Ubuntu 的安装。

现在安装正在进行中。待OS安装完,俺要开始安装 Lazarus。到时候继续跟帖报告经验。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主 发表于 2012-6-26 21:33:14 | 显示全部楼层
对了,我还应该测试一下交叉编译,直接在 WINDOWS 底下采用 Lazarus 写程序,编译为 Linux 程序,然后拿到 Linux 底下去运行看看。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-6-27 09:50:51 | 显示全部楼层
持续关注中...
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主 发表于 2012-6-29 01:40:00 | 显示全部楼层
安装完 Ubuntu Server 版,发现没有桌面,做开发不方便。于是重新下载 Desktop 版,在虚拟机里安装顺利完成。

在 Desktop 版的 Ubuntu 里面,有个 Ubuntu Software Center,点开,到里面点开开发工具,或者直接搜索 Lazaru,可以看到 Ubuntu 直接带了 Lazarus 的,只是还没安装。点安装,开始在线安装。

在线安装的时间很长。俺要下班了,只好中途中断。回家后继续在线安装。安装完成后,启动 Lazarus,一起顺利。建立一个项目,拖个 Button 过来,双击 Button ,怎么回事,没有切换到代码编辑器里面,没有自动创建 OnClick 方法,反倒是弹出个异常。

来回反复试了多次,重启 Ubuntu 后再试,还这样。不知道是不是安装过程中有中断导致没安装好造成的。

之前,俺下载了 CodeTyphon,在 Win7 底下安装成功,并且运行了它带来的 Lazarus 也成功。因此,俺直接把这个在 WINDOWS 下安装成功的 CodeTyphon 的安装文件夹共享给 Ubuntu 虚拟机。然后到虚拟机里面,按照 CodeTyphon 官方网站上的 Help 上的安装说明,在 Ubuntu 里面安装成功。不过第一次安装 CodeTyphon 成功后,Lazarus 还没安装。需要在终端里面,用命令方式,再次运行安装好的 CodeTyphon 的文件夹底下的 setup.sh。注意,Ubuntu 底下安装好的 CodeTyphon 是在 /usr/lib/codetyphon 底下。

运行 setup.sh 后,出来几条选项,选择 Move and build Lazarus 那条,然后它开始编译安装 Lazarus 了。时间比较长,你可以去冲杯茶,干别的事,上网聊个天什么的了。

等它安装完成,再次运行 codetyphon 的 setup.sh,然后选择第二条,即:Run Lazarus。哈哈,类似 Delphi7 的熟悉的界面出来了。而且 CodeTyphon 版的 Lazarus 已经自己带了一堆控件,包括我最常用的网络控件 Indy。不需要再单独安装控件了。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主 发表于 2012-6-29 01:54:42 | 显示全部楼层
打开 Lazarus 后,在它默认创建的新工程的 Form1 上面,拖一个 Indy 的 IdDUPServer1 过来。再拖一个按钮过来,双击按钮,自动出现 OnClick 事件方法框架,和预期一样。俺可以写代码了:IdUDPServer1.Active := True;  当然,事先在属性面板里给这个 UDP 控件设置好了 DefaultPort 的。

运行,看着 Lazarus 开始编译,很爽。终于界面出来,哈哈!

点按钮,弹出个异常:

保存代码到和 WIN7 共享的文件夹。回到 WIN7 底下,启动 Lazarus,打开同样的这个工程,编译运行,点按钮,没问题!

回到 Ubuntu 底下,点异常提示框的 Break 按钮,看看异常的代码停在哪里:



暂时不知道是不是 CodeTyphon 版自己带来的 Indy 在 Linux 底下有问题,还是 Indy 本身在 Linux 底下就是有问题。今天时间太晚,明天抽空再试试,单独安装个从 Lazarus 官网下载的 Lazarus(不是 Ubuntu 自己来安装的,也不是 CodeTyphon 来安装的),然后在这个 Lazarus 里面安装从 Indy 官网下载的控件,然后再看看是否出同样的错误。

不过,走到这一步,至少确认了:同一个 Lazarus 工程,有 Button, Edit, Label, IdUDPServer 等控件,在 Windows 底下能编译运行,一个字不改,在 Linux 底下也能编译运行。就这点来说,Lazarus 还是非常牛叉的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-7-2 21:07:41 | 显示全部楼层
好好学习。。。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主 发表于 2012-7-3 13:55:29 | 显示全部楼层
初步搞定,能打开 IdUDPServer 并且能收到 UDP 包了。经历了一些曲折。具体办法一会贴上来。现在先睡个午觉。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主 发表于 2012-7-3 14:36:28 | 显示全部楼层
暂时发现一个问题:WINDOWS 下 Indy10 IdUDPServer 发的包,WINDOWS下的程序能收到;Linux 底下用 Lazarus 写的利用 IndyUDPServer 的程序能收到。但 Linux 底下用 IndyUDPServer 发出的包, WINDOWS 底下的程序收不到,Linux 底下那程序自己也收不到。暂时没用抓包工具,不知道它究竟发出去包没有。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主 发表于 2012-7-3 19:26:48 | 显示全部楼层
这几天,碰到的问题记录:

1. Lazarus 启动后,有快捷键,没有菜单. 后来才发现,原来菜单到顶上的 Ubuntu 的系统菜单条上去了.而我是在虚拟机的窗口模式下打开 Lazarus 就看不到那个菜单. 把虚拟机切换为全屏幕,就看到那个菜单了.

2. Lazarus 的工程里用到 Indy10, IdUDPServer, 一设置 Active := True 就出异常. 原因是 WINDOWS 的线程和 LINUX 的线程不一样导致的。解决办法:

A. 工程单元uses的第一行必须要有

{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}

这个,在 CodeTyphon 带来的 Lazarus 在 Linux 底下创建一个新工程的时候,已经自动带上了。

B. 工程的编译参数需要加:-dUseCThreads  ;方法是打开 Project Option 界面,找到 Compile 项目底下的 Other 项目,里面有个大的 Memo 一样的框,框里是空白的。填入 -dUseCThreads 这个参数就可以了。

完成上述两个以后,再编译运行,不会有线程异常的错误提示了。
回复 支持 反对

使用道具 举报

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1

GMT+8, 2020-9-25 08:49 , Processed in 0.057268 second(s), 29 queries .

Powered by Discuz! F1.0 Build 20160930

© 2001-2020 Comsenz Inc. & Discuz! Fans

快速回复 返回顶部 返回列表