Lazarus - 从 Hello 开始

        我们在《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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

采用LoRA方法微调llama3大语言模型

文章目录 前言一、Llama3模型简介1.下载llama3源码到linux服务器2.安装依赖3.测试预训练模型Meta-Llama-3-8B4.测试指令微调模型Meta-Llama3-8B-Instruct5.小结 二、LoRA微调Llama31.引入库2.编写配置文件3.LoRA训练的产物 三、测试新模型效果1.编写配置文件2.运行配置文件&…

拼多多暂时超越阿里成为电商第一

关注卢松松,会经常给你分享一些我的经验和观点。 拼多多的财报又炸裂了: 拼多多发布了第一季度财报,营收868亿,增长了131%,净利润279亿,增长了246%,营销服务收入424亿,也就是商家的…

如何将老板的游戏机接入阿里云自建K8S跑大模型(下)- 安装nvidia/gpu-operator支持GPU在容器中共享

文章目录 安装nvidia/gpu-operator支持GPU在容器中共享 安装nvidia/gpu-operator支持GPU在容器中共享 安装 nvidia/gpu-operator遇到两个问题: 由于我们都懂的某个原因,导致某些镜像一直现在不成功。 解决办法,准备一个🪜&#…

peakcan硬件配置-用于linux的socket_can通讯

1.相关系统环境 工控机型号:Nuvo-8108GC 系统版本:ubuntu 18 工控机内置can卡:peakcan 2.下载并安装peakcan驱动 下载链接1–下载链接2–peakcan8.15.2驱动,支持socketcan编程 2.1 安装依赖库 sudo apt-get install udev sud…

建模:Maya

一、常用按键 1、alt 左键 —— 环绕查看 2、alt 中键 —— 拖动模型所在面板 3、空格 —— 进入三视图模式;空格 左键按住拖动 —— 切换到对应视图 二、骨骼归零 1、T Pose 旋转模式,点击模型,摆好T姿势即可 2、复制模型设置200距离…

线程的概念和控制

文章目录 线程概念线程的优点线程的缺点线程异常线程用途理解虚拟地址 线程控制线程的创建线程终止线程等待线程分离封装线程库 线程概念 什么是线程? 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一…

嵩山是颍水的嵩山

颍水对于嵩山具有特别重要的意义,嵩山的水流大多数汇入了颍河,颍河流域约占登封市总面积88%,从这个角度讲,嵩山就是颍水的嵩山。 再看环嵩山地区,即“嵩山文化圈”,学者们按黄、淮、济分为三个水系区。黄河…

Vue3实战笔记(39)—封装页脚组件,附源码

文章目录 前言一、封装页脚组件二、使用组件总结 前言 在Web开发中,页脚组件是一个重要的部分,它为用户提供关于网站的信息、导航链接以及版权声明等。而封装页脚组件则是一种高效的方法,可以提高代码的可重用性和可维护性。 一、封装页脚组…

C++实现基于http协议的epoll非阻塞模型的web服务器框架(支持访问服务器目录下文件的解析)

使用方法: 编译 例子:./httpserver 9999 ../ htmltest/ 可执行文件 端口 要访问的目录下的 例子:http://192.168.88.130:9999/luffy.html 前提概要 http协议 :应用层协议,用于网络通信,封装要传输的数据&…

如何在Windows下使用Docker Desktop运行CentOS容器

引言: 在Windows操作系统中,我们可以使用Docker Desktop来轻松运行和管理各种Linux容器,包括CentOS。今天,我们就来详细讲解一下如何在Windows环境下使用Docker Desktop来运行CentOS容器。 一、安装Docker Desktop 首先&#x…

贴片反射式红外光电传感器ITR8307

红外光电传感器ITR8307 ITR8307外形 特性 快速响应时间 高灵敏度 非可见波长 薄 紧凑型 无铅 该产品本身将保持在符合RoHS的版本内 描述 ITR8307/S18/TR8是一种光反射开关,它包括一个GaAs IR-LED发射器和一个NPN光电晶体管,该晶体管具有短距离的高…

QGIS DEM数据快速获取

背景 Dem 是非常重要的数据,30 m 的精度也是最容易获取的,目前有很多种方式可以获取,比如地理空间数据云,今天介绍用 QGIS插件获取。 这种方式的最大优势是方便快捷。 插件下载与安装 插件-管理并安装插件-搜索下载 OpenTopogr…

5.23小结

1.java项目创新 目前想添加一个自动回复的功能和设置验证方式有(允许任何人添加,禁止添加,设置回答问题添加,普通验证添加) 目前只完成画好前端界面,前端发送请求,还有表的修改 因为涉及表字…

Baxter机器人摄像头打不开的一个可能的解决办法

操作过程 1.连上机器人 cd ros_ws/ ./baxter.sh2.查看摄像头(最多开两个) rosrun baxter_tools camera_control.py -l 3.打开指定的摄像头 rosrun baxter_tools camera_control.py -o left_hand_camera -r 1280x800 另:关闭的话 rosrun…

vscode安装多版本esp-idf

安装 离线安装 vscode设置 建立一个新的配置文件, 这里面的插件是全新的 安装esp-idf 官网下载espidf 安装这一个 选项默认即可 记住各一个路径, 之后要用到 vscode安装插件 安装以后会进入这一个界面, 也可以CtrlShiftP输入ESP-IDFextension进入 使用espressif 问题 这一个…

TreeMap及TreeSet详解

在介绍TreeMap和TraaSet之前我们先来介绍一下Map和Set这样便于大家后续理解。 有这张图我们可以看出Set是继承Collection而Map没有继承任何的类,了解这一点对于后续的学习 是比较有帮助的。 TreeMap和TreeSet实现的底层原理(数据结构)是相同的…

./scripts/Makefile.clean 文件分析

文章目录 目标 $(subdir-ymn)目标__clean $(clean-dirs):     make -f ./scripts/Makefile.clean obj$(patsubst _clean_%,%,$) $(clean-dirs)$(patsubst _clean_%,%,$)_clean_api _clean_cmd _clean_common _clean_disk _clean_drivers _clean_drivers/ddr/altera _clean_d…

设计模式12——外观模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 外观模式(Facade&a…

神经网络模型结构和参数可视化

神经网络模型结构和参数可视化 一、前言二、Netron2.1Netron简介2.2TensorFlow、Keras、Caffe模型文件实测结果2.3PyTorch、scikit-learn模型文件实测结果 三、NN-SVG四、Netscope五、PlotNeuralNet六、Graphviz七、总结参考文档 一、前言 在神经网络的某些应用场景中&#xf…

【kubernetes】探索k8s集群中kubectl的陈述式资源管理

目录 一、k8s集群资源管理方式分类 1.1陈述式资源管理方式:增删查比较方便,但是改非常不方便 1.2声明式资源管理方式:yaml文件管理 二、陈述式资源管理方法 2.1查看版本信息 2.2查看资源对象简写 2.3配置kubectl自动补全 2.4node节点…