Lazarus - 从 Hello 开始

news2024/11/17 16:39:26

        我们在《Lazarus - 隐秘的神器》一文中了解到了 Lazarus 的历史和特点,此后将正式开始学习Lazarus 开发。

        如果你也对 Windows、Pascal、Delphi 开发感兴趣,请关注 Lazarus专栏 📰

安装开发环境

官网:Lazarus Homepage (lazarus-ide.org)

安装包(3.2.2):Download lazarus-3.2-fpc-3.2.2-win64.exe (Lazarus) (sourceforge.net)

Lazarus 的安装相比 Delphi 更加的简便,甚至直接选择好了本地语言:

默认选项,一路下一步即可

配置IDE

分离浮动窗口改为一体式窗口

        

        刚安装完的 IDE 是分离浮动式窗口,像极了早期的Delphi布局。优点是,灵活,非常的灵活,但也很难管理。     

        如果想要窗口合并为一的效果,很简单。

        在Lazarus的安装目录的/components/anchordocking/design/文件夹找到anchordockingdsgn.lpk文件。

        通过IDE菜单 软件包/打开软件包文件,选择  anchordockingdsgn.lpk 后

         点击软件包窗口工具栏上的【使用】按钮,选择【安装】菜单项

        确定即可 

        提示需要重新构建Larzaurs,选择【是】后,Larzaurs将自动重新编译并重启,重启后就是窗口合为一体的样子,很像现在的 Delphi 了。

设置编辑器主题

        你可能注意到我的 Lazarus 代码编辑器风格看起来很像 Delphi,通过 IDE 选项设置中的 编辑器 / 显示 / 颜色 设置项,选择不同风格即可,默认自带了五种。

代码结构线

        在较新的 Delphi 中,IDE集成了代码结构线的功能,可以方便的浏览代码结构,如下图:

        那么,Lazarus 可以吗?没问题!

        经过一番设置,可能你已经很难分得清 Delphi 和 Lazarus 了 😂

代码自动补全

         勾选 Codetools/标识符补全下的 自动援引(invoke)在输入时 选项

         写代码便捷多了:

 

Hello,Lazarus !

        就像任何语言的入门课程一样,我们也从 Hello 开始。

        点击菜单 项目/新建项目

        可见,其项目类型非常繁多,我们先从一个控制台程序开始,选择 【简单程序】(而不是控制台应用程序,否则创建出来的是带有CuteApp类的控制台程序)

确实非常简单

        不仅仅是外观很像,就连快捷键也一模一样,例如 F5设置断点,F9 运行,F7 单步,总之,从Delphi 转过来很自然的就适应了。

        下面我们写一行代码,让它输出 Hello,Lazarus!

        Lazarus 中用什么函数输出呢?凭借 Delphi 的经验,我们用 writeln 试试。

        没有错误波浪线,似乎成了 🤭

        F5在 最后一句 end. 处下个断点,F9跑起来试试吧!

        

        选择调试信息格式?Dwarf?

        这是什么,在 Delphi 中,没有这些东西啊。

什么是 DWARF 

       DWARF 全称 Debugging with Attribute Record Formats ,是一种调试信息的存放格式。

       DWARF 第一版发布于 1992 年,主要是为 UNIX 下的调试器提供必要的调试信息,例如内存地址对应的文件名以及代码行号等信息,通常用于源码级别调试使用。另外通过 DWARF,还能还原运行时的地址成为可读的源码符号(及行号)。

        DWARF 被许多编译器和调试器用来支持源代码级调试。它能满足 C、C++ 和 Fortran 等程序语言的要求,并可扩展到其他语言。DWARF 与体系结构无关,适用于任何处理器或操作系统。它被广泛应用于 Unix、Linux 和其他操作系统,以及独立环境中。

        Lazarus 顺应了历史的潮流,因为 DWARF 已经在类 UNIX 系统中逐步替换 stabs(symbol table strings),成为一种主流的调试信息格式。

        目前, DWARF 已经到了第五版。       

        我们可以简单的理解为 DWARF 是和 Windows 上的符号文件 PDB 的对等 。

        按照默认选择,点击确定,看看我们的程序跑起来的样子

        很棒,非常顺利 😊 

        这是我们的第一个 Lazarus 程序,并且它对自己打了招呼!

窗口版的 Hello

         点击菜单 项目/新建项目,这次就用默认选择的【应用程序】即可

        依然是熟悉的 Delphi VCL 窗口的味道

         通过组件面板,添加一个按钮到窗口上,双击按钮,自动生成并定位到 Button1Click 事件,这一系列操作,和 Delphi 也是毫无分别,体验十分顺畅

        

        在 Delphi 中,一般是通过  ShowMessage 函数显示消息窗口的,我们试试 Lazarus 中是否也可以

        非常的顺畅! 

         没有任何学习,凭借 Delphi 的操作、编码经验,我们完美的实现了控制台、窗口两个版本的Hello,Lazarus !

为什么编译出来的程序这么大?

        但是,当我看到输出的程序大小为25M后,有点难以接受,即使 Delphi 的调试版本也只有11M多,为什么这么大呢,可以减小一点吗?

        官方给出了回答,总的来说主要还是调试信息过于丰富,同时也是可以去除的。

Why are the generated binaries so big?

The binaries are big because they include a lot of debug information necessary for using gdb (GNU Debugger). A debugger is a program that is used to test your code. It uses the extra-information stored in your binary to test it. But once your program is working well, you may delete those infos and reduce the size of the binary.

Quick guide to Lazarus/FPC application size reduction

  • 1. Project|Compiler Options|Code|Smart Linkable (-CX) -> Checked
  • 2. Project|Compiler Options|Linking|Debugging| Uncheck all except Strip Symbols From Executable (-Xs)
  • 3. Project|Compiler Options|Linking|Link Style|Link Smart (-XX) -> Checked

  💡 Note: only do this if you don't need to run the debugger. For more details, see Size Matters

Lazarus executable size starts big, but grows very slowly, because of the way the LCL is designed, and its use of certain Free Pascal features (RTTI). Projects that don't use the LCL are much smaller (this is similar to some non-GUI C++ frameworks). This typically requires more manual coding though.

Exclude image readers See Lazarus 1.10.0 release notes#LCL Changes If your app does not use images compressed in one of those formats, then you can exclude it.

即作如下配置

        但我在尝试这些设置后,体积减小的微乎其微,最终是将调试符号剥离,即勾选了 【使用外部调试符号文件(-Xg)选项后,体积锐减到 2M 多😀

        

        

总结 

        至此,我们完成了 Lazarus 编程的初体验,无论从外观、操作习惯到编码习惯,Lazarus 和 Delphi 高度一致,只要有 Delphi 的开发经验,就可以丝滑切换到Lazarus,这是一种神奇的体验!🆒


参考

DWARF - Free Pascal wiki

DWARF Debugging Information Format (dwarfstd.org)

Lazarus FAQ - Lazarus wiki (freepascal.org)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1684124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧园区EasyCVR视频智能管理方案:构建高效安全园区新视界

一、背景分析 园区作为城市的基本单元,是最重要的人口和产业聚集区。根据行业市场调研,90%以上城市居民工作与生活在园区进行,80%以上的GDP和90%以上的创新在园区内产生,可以说“城市,除了马路都是园区”。 园区形态…

Redis的下载、安装、启动和初尝试【超级简单】

redis最好是在Linux系统中使用,这是最接近生产实际的环境。 不过,我们初学者,目的是学习Redis的使用、原理,如果在Linux下直接学习Redis,很可能会因为命令不熟悉而劝退,这是不好的。 因此,我主张…

知乎广告推广开户最低需要多少钱?

精准高效的广告推广,是企业成功的关键,知乎作为知识分享与交流的高端平台,汇聚了大量高质量用户群体,无疑是品牌传播与产品推广的黄金之地。云衔科技作为您数字营销旅程中的得力伙伴,正以专业的知乎广告开户及代运营服…

【企业动态】东胜物联成为AWS硬件合作伙伴,助力实现边缘智能

近日,AIoT硬件设备供应商东胜物联与全球领先的云计算服务提供商亚马逊云(AWS)达成合作关系,共同致力于推动物联网技术的发展,为企业客户提供更智能、灵活的硬件解决方案,助力智能化升级和数字化转型。 作为…

fping 一键检测局域网内的连接设备(KALI工具系列三)

目录 1、KALI LINUX简介 2、fping工具简介 3、在KALI中使用fping 3.1 目标主机IP(win) 3.2 KALI的IP 4、操作示例 4.1 检测主机是否存活 4.2 发送ping包 4.3 指定发送ping包的大小 4.4 生成目标列表 5、总结 1、KALI LINUX简介 Kali Linux …

利用 MongoDB Atlas 进行大模型语义搜索和RAG

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

太速科技-基于5VLX110T FPGA FMC接口功能验证6U CPCI平台

基于5VLX110T FPGA FMC接口功能验证6U CPCI平台 一、板卡概述   本板卡是Xilinx公司芯片V5系列芯片设计信号处理板卡。由一片Xilinx公司的XC5VLX110T-1FF1136 / XC5VSX95T-1FF1136 / XC5VFX70T-1FF1136芯片组成。FPGA接1片DDR2内存条 2GB,32MB Nor flash存储器&a…

本特利330878-90-00前置传感器在PLC系统中的应用与优势

本特利330878-90-00前置传感器在PLC系统中的应用与优势 一、引言 在现代工业自动化领域中,传感器作为信息获取的重要工具,其性能的稳定性和准确性直接影响到整个系统的运行效率。其中,本特利330878-90-00前置传感器以其卓越的性能和广泛的应…

Mysql搭建主从同步,docker方式(一主一从)

服务器:两台Centos9 用Docker搭建主从 使用Docker拉取MySQL镜像 确保两台服务器都安装好了docker 安装docker请查看:Centos安装docker 1.两台服务器都先拉取mysql镜像 docker pull mysql 2.我这里是在 /opt/docker/mysql 下创建mysql的文件夹用来存…

LiveGBS流媒体平台GB/T28181用户手册-云端录像:查看录像、列表视图、时间轴视图、下载、删除

LiveGBS流媒体平台GB/T28181用户手册-云端录像:查看录像、列表视图、时间轴视图、下载、删除 1、云端录像1.1、查看录像1.1.1、时间轴视图1.1.2、列表视图1.1.3、日期切换1.1.4、删除当天 1.2、录像计划1.2.1、录像计划列表1.2.2、编辑录像计划1.2.3、关联通道1.2.4、删除录像计…

Steam致富:玩免费游戏Banana获得可交易道具

最近,Steam平台上一款普普通通的免费游戏《Banana》引起了轰动,接近2万人同时在线,好评率高达94%,究竟是什么让这款游戏如此受欢迎呢?原来,玩家们都在争相获取稀有的香蕉。 《Banana》属于点击放…

电信光猫获取超级密码,亲测可用

目前多数地区的光猫超级密码都改成动态的了,之前的密码已经无效,也有部分地区还有效。 动态密码目前可通过抓包来获取,比较简单。 抓包获取密码 1. 下载小翼管家(建议版本小于5.0)并通过WiFi或其他绑定你的光猫。 …

创建型设计模式之建造者模式

文章目录 概述定义建造者模式原理结构图小结 概述 建造者模式又被称为生成器模式,是一种创建型设计模式。 和之前的单例,工厂一样,同属于创建型设计模式。 定义 建造者模式是将一个复杂对象的构建与表示分离,使得同样的构建过程…

深入理解 Spring 循环依赖之三级缓存(附源码分析)

前言: 学过 Spring 的都知道 Spring 利用三级缓存解决了循环依赖问题,那你知道什么是循环依赖?什么又是三级缓存?本篇将从源码层面分析 Spring 是怎么去利用三级缓存帮我们解决循环依赖问题。 深入理解 Spring IOC 底层实现机制…

Day 38 防火墙技术IPtables

一:防火墙简介 1.简介 ​ iptables其实并不是真正的防火墙,我们可以把他理解为一个客户端的代理,用户是通过iptables这个代理,将用户的安全设定执行到对应的“安全框架”中,这个“安全框架”才是真正的防火墙。这个框…

【go项目01_学习记录15】

重构MVC 1 Article 模型1.1 首先创建 Article 模型文件1.2 接下来创建获取文章的方法1.3 新增 types.StringToUint64()函数1.4 修改控制器的调用1.5 重构 route 包1.6 通过 SetRoute 来传参对象变量1.7 新增方法:1.8 控制器将 Int64ToString 改为 Uint64ToString1.9…

Linux程序开发(八):操作系统进程通信编程

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

Java面向对象-常用类 (包装类)

常用类 – 包装类 基本数据类型的包装类 理解:包装类是8种基本数据类型对应的类 出现原因:Java是一种纯面向对象语言,但是java中有8种基本数据类型,破坏了java为纯面向对象的特征。为了承诺在java中一切皆对象,java…

【Hive SQL 每日一题】分析电商平台的用户行为和订单数据

需求描述 假设你是一位数据分析师,负责分析某电商平台的用户行为和订单数据,平台上有多个用户,用户可以在不同的日期下单,每个订单包含多个商品。请你完成相关业务分析,帮助平台优化运营策略和用户体验。 数据准备 …

音视频-常用的分析工具介绍-连续补充

目录 1:Audacity 2:MediaInfo 3:MP4Box 4:hexinator 5:Adobe Audition 6:VideoEye 7:YUVplayer (YUV/RGB播放器) 在做音视频分析时,经常用到各种分析工…