Lazarus常见问题解答

来自Free Pascal wiki
(重定向自Lazarus常见问题)
跳转到导航跳转到搜索

英语(en)

灯泡 注:此常见问题解答可能是过时的在某些部分。

概述

什么是拉撒路?

Lazarus是一个跨平台集成开发环境(IDE),允许您创建可视化(GUI)和非可视化对象帕斯卡程序,并使用Free Pascal编译器生成可执行文件。其目的是写一次,在任何地方编译:您应该能够使用运行在另一个操作系统(或交叉编译器)上的Lazarus重新编译程序源代码,并获得在该操作系统上运行的程序。

有关更多详细信息,请参阅Free Pascal和Lazarus概述

为什么生成的二进制文件这么大?

二进制文件很大,因为它们包含了使用gdb(GNU Debugger)所需的大量调试信息。调试器是一种用于测试代码的程序。它使用存储在二进制文件中的额外信息进行测试。但一旦程序运行良好,您可以删除这些信息并减小二进制文件的大小。

Lazarus/FPC应用程序规模缩减快速指南

  • 1.项目|编译器选项|代码|智能链接(-CX)->选中
  • 2.项目|编译器选项|链接|调试|取消选中除从可执行文件中删除符号(-Xs)之外的所有符号
  • 3.项目|编译器选项|链接|链接样式|链接智能(-XX)->选中
灯泡 注:只有在不需要运行调试器时才这样做。有关更多详细信息,请参阅大小很重要

Lazarus可执行文件的大小一开始很大,但增长非常缓慢,这是因为LCL的设计方式,以及它使用了某些Free Pascal功能(RTTI)。不使用LCL的项目要小得多(这类似于一些非GUI C++框架)。但这通常需要更多的手动编码。

排除图像读取器请参见Lazarus 1.10.0发行说明#LCL更改如果你的应用程序不使用这些格式之一的压缩图像,那么你可以将其排除。

我需要ppc386.cfg还是fpc.cfg?

您只需要fpc.cfg。这样编译器就知道在哪里可以找到库。

如何编译Lazarus?

这样做:

光盘拉扎勒斯使全部干净

如果要为不同的小部件集(例如Qt)构建Lazarus(在Linux、Windows和OSX上受支持),请使用LCL_PLATFORM参数:

光盘拉扎勒斯使全部干净LCL_平台=夸脱

在没有Lazarus IDE的情况下,是否可以构建Lazaru项目?

请参见在不使用Azarus的情况下使用_LCL

如何在没有Lazarus IDE的情况下构建其他使用LCL的Free Pascal程序?

请参见使用_LCL_而不使用_Lazarus

需要什么版本的FPC?

任何Lazarus版本都可以编译并与两个最新的FPC发布版本协同工作。FPC的发布周期很慢,两个最新版本通常持续几年。

Lazarus中继也支持FPC中继。

  • Lazarus 1.0.8至少需要FPC 2.6.2。
  • Lazarus 1.0至少需要FPC 2.6.0。
  • Lazarus 2.x至少需要FPC 3.0.0
  • Lazarus 3.0至少需要FPC 3.2.0

我不能编译Lazarus

  1. 检查编译器的版本是否正确
  2. 检查(fpc)库是否来自同一版本
  3. 检查编译器安装路径中是否有空格。确保没有!
  4. 检查您是否有fpc.cfg而没有旧的ppc386.cfg
  5. 另请查看与操作系统相关的常见问题
  6. 如果你仍然卡住了,请在论坛或Lazarus邮件列表上询问

如何在可执行文件中嵌入一个小文件,而不需要单独的文件?如何嵌入资源?

同时支持Lazarus资源和Windows类型/FPC资源。请参见Lazarus资源.

Lazarus使用的各种文件扩展名的含义是什么?

这个Lazarus教程#拉扎鲁斯文件通过示例解释了一些扩展。以下是一个简要列表:

延伸 文件类型 描述
.lpi文件 Lazarus项目信息 包含特定于项目的设置,如编译器设置和所需的包。存储在XML中
.内毒素 Lazarus计划会议 个人数据,如光标位置、源编辑器文件、个人构建模式。存储在XML中
.lpr文件 Lazarus计划 主程序的Pascal源。
.lfm(毫米) Lazarus形式 表单上所有对象的表单配置信息(以Lazarus特定的文本格式存储,类似于Delphi dfm;操作由Pascal源代码在相应的*.pas(磅/平方英寸)文件)
.pas(磅/平方英寸)
.pp(磅)
.p英寸
帕斯卡码 Pascal代码通常用于存储在相应的*.lfm(毫米)文件
.lrs文件 Lazarus资源 生成的Lazarus资源文件;不要与Windows资源文件混淆。

可以使用lazres工具(在目录Lazarus/Tools中)使用命令行创建此文件:lazres myfile.lrs myfile.lfm

.ppu(磅/平方英寸) 编制单位 由Free Pascal编译器为每个单元和程序创建的编译源代码。
.o型 对象文件 由编译器创建的每个ppu文件都有一个链接器所需的对应o文件。
.lpk(液化石油气) Lazarus包裹信息 特定于包的设置,如编译器设置和所需的包;存储在XML中
.lrt(轻轨) Lazarus Resourcestring表 保存lfm文件和i18n时创建的Lazarus Resourcestring表已启用。它包含lfm的TTranslateString属性。不要编辑它们,它们会被覆盖。
.rst(第一个) 资源字符串表 编译器为每个带有Resourcestring节的单元创建的Resourcestring表。不要编辑它们,它们会被覆盖。
.po型 gnu gettext消息 什么时候?国际18n启用后,IDE使用rst和lrt文件中的资源字符串创建/更新.po文件。

为什么是TForm。ClientWidth/ClientHeight与TForm相同。宽度/高度

TForm。宽度/高度不包括框架,因为无法在所有平台上检索框架大小。如果没有可靠的方法,LCL会在屏幕上移动表单或无休止地调整表单大小。

最终,当有可靠的方法可以在所有平台上获得带有框架的窗口的大小和位置时,它将被改变。为了保持与旧LCL表单的兼容性,将添加版本号和一些额外的方法。

错误

平台特定的错误/问题也将在以下章节中介绍。

'致命:a和b之间的循环单位引用'

当一个新用户想要创建两个引用彼此属性的表单时,会发生一件常见的事情。上述错误只发生在接口部分的uses子句中,因此可以将其放在实现部分。例子:

这会导致错误:

单元 ;

接口

使用 b条;

实施

结束.
单元 b条;

接口

使用 ;

实施

结束.

但这个没有:

单元 ;

接口

实施

使用 b条;

结束.
单元 b条;

接口

实施

使用 ;

结束.


在某些情况下最小基类方法可能合适。

将一个类分离为一个最小基类(另一个需要),并为实现的其余部分派生它。


单位:使用unitb

  类型
    A级 = (基本A级)
    //A级的其余部分
    结束;

单位b:

  类型
    B类 = ;  //远期申报

    基本A级 = 
    //参考B类
    结束;
       
    B类 = 
    //引用BaseClassA
    结束;

讨论:https://forum.lazarus.freepascal.org/index.php/topic网站,25667.消息156115.html#消息156115

当我这样做的时候var mytext:text;要声明一个文本文件,我得到“Unit1.pas(32,15)Error:Errorintypedefinition”。我该如何解决这个问题?

TControl类有一个文本属性。在具有较高可见性的表单方法中文本从系统单元输入。您可以使用文本文件类型,它只是文本类型的别名,也可以将单元添加到类型定义中。

无功功率,无功功率
  我的文本文件: 文本文件;
  我的文本: 系统.文本;

分配和关闭文本文件时存在类似的名称冲突。TForm具有分配和a关闭方法。你可以使用分配文件关闭文件或添加装置名称系统.

使用打印机时出错。BeginDoc公司

打印机必须添加到使用部分打印机4Lazarus包必须添加到IDE中的项目需求中,路径为:项目>项目检查器>添加>新需求>包名称。

如果打开下拉框时Printer4Lazarus软件包不在列表中,则必须安装它。该软件包是Lazarus安装的一部分,可以在以下位置找到:[Lazarus installed directory][/|\]components[/|\]printers。

如果您使用的是默认安装目录[lazarus installed directory]:

操作系统 Lazarus安装目录
自由BSD /usr/local/share/lazarus(usr/local/share/lazarus)
Linux操作系统 /usr/lib/lazarus
macOS操作系统 /图书馆/Lazarus/
窗户 c: \lazarus公司

同样的解决方案也适用于引用时可能出现的异常打印机。打印机.

当我试图编译一个项目时,收到一条错误消息“Cannot find Unit…”

请参阅找不到单位-如何查找单位

有关“找不到单元接口”错误的信息,请参阅下一节。

当我试图编译一个项目时,收到一条错误消息“Cannot find Unit interfaces”

此错误意味着编译器找不到文件“interfaces.ppu”找到了该文件,但它是错误的或过时的(.ppu文件的日期代码早于编译器本身的日期代码)。通过项目:编译器选项…测试编译器选项设置可以帮助调试这些问题。。。(使用对话框底部的测试按钮)。此测试还允许您检查{TargetCPU}和{TargetOS}变量是否设置正确。

接口单元可以在{LazarusDir}\lcl\units中找到\{目标CPU}-{TargetOS}\{LCLWidgetSet}\interfaces.ppu。例如:/home/username/lazarus/lcl/units/i386-linux/gtk/interfaces.ppu。

通常有多个版本的interfaces.ppu(在适当的目录中),以允许使用不同的小部件进行编译。

如果interface.ppu文件位于与您在项目首选项中选择的操作系统和CPU相匹配的文件夹中,并且您遇到此错误,则编译项目时使用的编译器/RTL与编译Lazarus IDE时使用的不同,或者需要重新编译库以使.ppu文件的编译日期更新。

您可以执行以下操作之一:

  1. 将环境选项中的编译器设置为用于编译Lazarus的编译器。还要仔细查看“环境选项”,看看您是否为Lazarus目录和FPC源目录使用了正确的路径。检查编译器配置文件fpc.cfg是否只有一个版本-对于Linux/Unix系统,它应该位于/etc/中,或者与用于Windows系统的fpc编译器位于同一目录中。尝试运行“fpc-vt bogus”来检查系统中使用的是哪个fpc.cfg。如果你把编译器更新到新版本,盗版经常会潜入;它们可能位于主目录中,也可能位于构建新编译器的同一目录中。删除这些!
  2. 使用在“环境选项”中选择的编译器重建LCL(或完全重建Lazarus)。您可以使用工具->构建Lazarus来实现这一点。在执行此操作之前,请检查工具->配置构建Lazarus中的当前设置。
  3. 您也可以尝试更改当前为项目选择的小工具集。例如,Lazarus附带的示例项目“objectinsperct”默认设置为gtk。编译这个项目肯定会让你在Windows平台上“找不到单元接口”。在中将小部件集更改为默认值(Win32)项目选项|编译器选项。。。应该可以解决这个问题。

当我编译一个使用LCL单元的项目时,我会得到一个链接器错误

下面是此类链接器错误的示例:

/路径/to/lazarus/lcl/units/x86_64-linux/wsimglist.o:在函数“REGISTERCUSTOMIMAGELIST”中:/path/to/lazarus/lcl//widgetset/wsimglist.pp:266:未定义对“WSRegisterCustomImageList”的引用
  • 确保您的项目使用LCL包。您可以在项目检查器中进行检查。
  • 确保单元“接口”被用作程序的第一个单元。
灯泡 注:这些功能由LCL后端实现。通过添加单元接口,可以将LCL后端链接到程序中。

在行:{$R*.DFM}我如何解决这个问题(FPC<2.4.0的Lazarus)?

Lazarus(或更好的Linux)不了解资源,因此不能像Delphi/W32那样使用资源。然而,Lazarus使用的方法与此非常兼容。如果使用以下步骤,您仍然可以使用Delphi布局(.dfm文件):

  • 您需要.dfm文件的文本版本。默认情况下,D5及更高版本执行此操作。如果您有较旧的文件:中高音+2012财年将布局视为文本并粘贴/复制。如果您有一个text.dfm文件,只需将其复制到.lfm文件即可。
  • 用lazers(在lazarus/tools中)创建一个文件lazers yourform.lrs yourform.sfm
  • 将以下初始化部分添加到
初始化
{$I yourform.lrs}

请记住,并非所有dfm中的属性都由Lazarus支持,因此可能会发生崩溃。

编辑:因为FPC2.4.0,所以支持Delphi风格的资源,所以您不需要更改任何内容。即使是Lazarus SVN也已经将其用作默认项目。注意:仍然建议您使用Lazarus的Delphi项目转换器,因为可能仍然存在不支持的属性。

'找不到标识符LazarusResources'

当创建表单时,Lazarus会自动在表单单元的uses部分添加一些额外的单元。在将德尔菲单位转换为拉撒路单位的过程中,这不会发生。因此,您需要将LResources添加到表单单元的Uses部分。

访问对象的事件时,例如,按钮的onclick事件,我得到以下错误。找不到错误单元:stdCtrls

确保在Project->ProjectInspector中,您的项目依赖于包“LCL”,并且您已经安装了FPC源代码。

Lazarus是IDE和可视化组件库LCL。所有其他东西,如IO、数据库、FCL和RTL都由FPC提供。IDE需要指向所有源的路径。

可通过以下方式设置FPC源路径:环境->环境选项->文件->FPC源目录

'致命:内部错误XXXXYYZZW'

内部错误是预期不会发生的编译器错误(但如果发生,可以通过提供代码XXXXYYZZW轻松跟踪问题)。每个内部错误都是一个bug,因此建议在收到bug时向bugtracker报告(用小示例演示内部错误)。

致命错误:找不到[…]使用的[…],不兼容的ppu=[文件名],包[包名称]

当编译器给出消息“找不到B使用的A”时,Lazarus会检查搜索路径中有哪些pas/pp/ppu文件,如果有ppu文件则会插入“不兼容的ppu=filename,package”。

说明:FPC无法使用此ppu,原因如下:

  • 它是用另一个FPC版本编译的;
  • 它是用搜索路径中没有的其他一些ppu文件编译的(取决于);
  • 您错误配置了一些搜索路径。

在不知道如何安装FPC+Lazarus的情况下,我很想删除这两个文件,然后重新开始(确保删除FPC.cfg文件)。

如果路径的最后一个字符是空格,则Lazarus无法打开项目

如果您尝试打开一个项目,如/主页/bart/space/test.lpi(注意/test.lpi前面的空格),Lazarus IDE会给出一个错误,说找不到/主页/bart/space/test.lpi.

这是IDE的一个已知限制,这是由于IDEa.o.必须处理用户在编辑控件中提供的路径,这些路径必须从周围的空间中剥离出来。此限制不会影响用FPC/Lazarus编写的用户程序。避免在项目中使用此类路径名。

strToFloat-EConvertError:“0.nnn”是无效的浮点

“0.nnn”可以是任何浮点数。问题是,您的区域设置(例如德国)要求逗号作为数字的小数分隔符,而不是小数点。解决方案是将此添加到代码中:默认格式设置.小数分隔符 := '.';覆盖区域设置的小数分隔符。或者,使用Pascal内部函数val和str代替strToFloat和floatToStr,它们总是需要一个小数点。

调试器

另请参见GDB调试器提示.

如何设置/配置调试

设置调试器

如何检查属性?

您必须使用FPC 2.4或更新版本。

如果您使用-gw(侏儒调试信息)编译应用程序,那么您应该能够检查属性。

灯泡 注:这仅适用于直接映射到变量的属性(“read”声明指向成员,而不是函数)。

如果属性返回函数的值,那么评估/检查它是非常危险的。它需要调用此函数,并且经常会更改某些变量的值。这意味着它将改变调试器中应用程序的状态,任何进一步的代码执行、调试或检查都将返回错误的结果。

显式检查函数结果的可选功能(描述了风险),因此尚未实现从调试器调用代码

为什么调试器不显示某些变量/结构(“无此类符号”/“不完整类型”)

对于调试问题:

  • 属性
  • 数组。。。(动态阵列)
  • 嵌套过程中的变量
  • “上下文中没有此类符号”
  • “不完整类型”

请参阅GDB_调试器提示和和FpDebug#属性

如何从使用Lazarus的包中调试FCL组件

默认情况下,FCL组件和类是在没有调试信息的情况下构建的,因此,gdb无法访问组件方法或属性。要构建包组件,必须使用调试线信息“-gl”开关重新构建它们。

本例假设您有一个带有/usr/local/installation前缀的Linux发行版,并且需要数据库包fcl-db来包含调试线信息。在本例中使用fcl-db时,您可以从任何包含的包中发出此make命令。

开始之前,您需要通过检查FPC配置文件来定位FPC路径。文件(fpc.cfg)位于/etc/fpc.cfg。显示fpc.cfg的内容并查找fpc安装路径。在fpc.cfg中查找以-Fu开头的行:

-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget/*

使脚本将单元安装到INSTALL_PATH/lib/fpc/$fpcversion/units/$fpctarget/中,因此,您必须确保/usr/local是安装路径,并且应该分配给INSTALL_PREFIX,否则Make脚本将把单元放在不属于它们的地方,或者Make脚本将失败。

  1. 打开外壳端子
  2. cd/user/local/share/src/fpc-2.3.1/fpc/fcl-db/
  3. sudo make clean all安装install_PREFIX=/usr/local OPT=-gl
灯泡 注:应为要安装的装置正确配置INSTALL_PREFIX参数。

在下面的示例中,/usr/local是Linux的默认fpc路径,但在其他操作系统上可能有所不同。

清除所有安装安装_刷新=/usr/本地选择=-全球

最后,在重建任何FCL单元后,您可能还需要重建LCL。

Mac上的GDB问题

Lazarus现在支持Mac上的lldb。请参见配置lldb调试器.

如果你想使用gdb,你可以在这里找到一些信息:Mac的GDB提示

如何使用日志文件进行调试?

Lazarus提供了一个基本的日志框架(样式调试(…))在单元中LazLogger公司。有关详细信息,请参阅该页。

如何使用日志文件调试IDE本身?

拉撒路本身使用LazLogger公司.

这意味着你可以用

--调试log=lazarusdebuglog.txt

如果这还不够:在IDE中,可以使用控制所记录信息的范围--可调试。请参阅--帮助获取关键字列表,或安装包IdeLazLogger。

如果要在控制台上输出(对Windows最有用),请添加选项-卫生间在工具/配置“Build Lazarus”选项中。然后重建拉撒路。

另请参见控制台模式Pascal#使用重定向输出在IDE中运行

为Lazarus做出贡献/做出改变

我创建了一个补丁,将IDE消息表单停靠在“源代码编辑器”表单上(底部)

这些补丁不会被应用,因为它们只实现了所需对接的一小部分。目标是创建一个完整的码头管理器并使用它。一个完整的停靠管理器可以停靠所有IDE窗口,并允许用户定义如何停靠。例如,将消息窗口停靠在源编辑器的上方或下方,或者根本不停靠。例如,

+-------------------++--+|菜单|||+-------------------+|  |+--++---------------+|  ||PI||源编辑器||CE|+--+|               ||  |+--+|               ||  ||  |+---------------++--+|OI公司|+-------------------+|||条消息|+--++-------------------+

码头管理员可以存储布局并在下次装载时恢复。最好码头经理也可以停靠页面。dock管理器不需要使用拖放操作。所有没有停靠管理器而实现停靠的补丁都会使实现真正的停靠管理器变得更加困难,并将被拒绝。

这种码头管理器的一个示例是软件包锚碇

我已经修复/改进了Lazarus。如何将更改添加到Lazarus官方源代码中?

创建补丁并将其发送给开发人员。有关详细信息,请参阅创建修补程序.

如何安装多个Lazarus副本?

请参阅多个Lazarus

如何成为SVN和错误跟踪程序中的Lazarus开发人员和访问管理人员?

首先,你必须了解拉撒路,以证明你的知识和技能。首先阅读Lazarus文档维基文章,阅读Lazarus源代码,查看Lazarus Bug-Tracker软件,修复一些错误,如果您认为已经准备好了,请联系开发人员邮件列表.

在哪里。。。定义

虚拟键常量

虚拟键常量定义于LCL类型。将LCLtype添加到您的使用.

使用IDE

如何使用“标识符补全”?

您可以通过按[ctrl][space]调用标识符补全。在菜单项下环境->编辑器选项->代码工具->自动功能您可以设置此操作自动发生的速度。

我可以更改代码编辑器的字体和颜色吗?

是,请参见菜单项工具->选项并使用编辑器/显示和颜色部分。在Windows上,您可能会发现默认的Courier(和其他一些字体)过于尖锐或过于柔和,或者选择/取消选择“禁用抗锯齿”。TrueType字体是一种改进,例如免费的“Bitstream Vera Sans Mono”字体[1](要安装新字体,请解压缩并将文件复制到合适的文件夹中。在Windows XP中,您需要使用“控制面板”的“字体”部分。在Windows 7中,您可以选择所有字体文件,右键单击并在弹出菜单中找到“安装”选项)

如何禁用特定的编译器警告消息?

要禁用特定的编译器警告消息,可以插入{$警告号码关闭}指令或使用FPC选项-虚拟机<x>。您可以在FPC中找到这些的详细信息程序员指南和附录A用户指南.

IDE命令行选项有哪些?

请参见Lazarus命令行选项.

Linux操作系统

在编辑字段中键入会生成重复的字母

在Ubuntu和Ubunto派生的发行版以及GNOME Desktop中,这种情况更容易发生,但其他发行版/桌面环境也会受到影响。

这个问题是由ibus输入法系统中的错误引起的。不幸的是,Ibus是GNOME桌面的默认输入方法。

如果你不知道IM是什么,这意味着你不需要它,因此最简单的方法就是禁用IM。

为此,您有许多选项,即:

  • 1-在系统设置->首选项->输入法中禁用(或设置为“无”)输入法
  • 2-在/etc/profile(系统范围)中添加以下三行
export GTK_IM_MODULE=GTK-IM-context-simpleexport QT_IM_MODULE=简单export XMODIFIERS=@im=无
  • 3-添加名为输入方法.sh仅包含/etc/profile.d(系统范围)中上面的3行
  • 4-在主目录~/.xprofile(每个用户)中添加上面的3行。如果主目录中没有~/.xprofile,则应该创建一个。
  • 5-创建包含相同3行的Lazarus启动脚本。(只影响拉撒路)

方法1和方法2在系统更新后可能无法生存,而方法3、方法4和方法5则会生存。

请注意,GTK和QT应用程序可能会动态更改IM。如果您以一种明显随机的方式遇到问题,那么很有可能会出现其他应用程序正在再次启用IM,并且在终止时无法设置为默认值。如果是这种情况,方法5是唯一合适的方法。

有关输入法以及如何处理输入法的更多信息,请参阅:

https://fedoraproject.org/wiki/I18N/InputMethods(输入方法)(这是针对Fedora的,但大多数信息都适用于一般情况)

http://www.pinyinjoe.com/linux/ubuntu-12-chinese-setup.htm(这是Ubuntu特有的,但大多数信息同样适用于一般情况。它解释了如何使可能IM,但信息也可用于使残废它)

在没有IDE的情况下如何在Linux上调试?

首先,您需要一个调试器。gdb是linux和有几个GUI前端可用。一个常见的前端是ddd,它是最常见分布的一部分。使用调试信息编译lazarus/lcl然后,您应该使用以下命令启动调试会话:

使干净;制作选择=-数据调试ddd拉扎罗斯

然而,请注意,ddd并不像,例如Lazarus调试器,尤其是在查看变量内容时,您必须考虑到ddd/gdb是区分大小写的,而Pascal是区分大写的。因此,必须以大写形式键入所有变量名才能查看其内容。有关更多信息,请参阅fpc手册。

我现在可以调试了,但ddd找不到我的源代码,或者抱怨它们不包含代码。那是什么?

这是与gdb或ddd的路径相关的问题。你可以通过以下方式避免这种情况

  • 使用ddd菜单中的“Change directory”命令,选择源所在的目录。这种方法的缺点是,您现在无法使用开始时使用的程序的源代码(例如lazarus)。因此,可能需要多次更改目录。
  • 在ddd中,转到[Edit][gdb-settings]并设置搜索路径
  • 创建$(HOME)/.gdbinit文件,如下所示:
目录/your/path/to/lazarus目录/your/path/to/lazarus/lcl目录/your/path/to/lazarus/lcl/include

我在链接过程中收到一个错误,该错误表示/usr/bin/ld:cannot find-l<some lib>

例如:

/usr/bin/ld:无法找到-lgdk

这意味着找不到外部库。在Linux下的上述情况中,这意味着找不到libgdk.so或libgdk.a。通常,这意味着您忘记安装此库的开发包。在gdk的情况下,包在Fedora Core发行版下被调用:“gtk+-devel-1.2.10-33”。

基于包的分发
您需要安装提供lib<somelib>.so或lib<somerib>.a文件的包。linux下的动态库具有.so扩展名,而静态库具有.a扩展名。在某些linux发行版上,您已经安装了包(rpm,deb)<packagename>,它提供了<some lib>,但您还需要开发包(rpm、deb),通常称为<packangename>-dev,它包含.a(静态库)和/或.so(动态库)。
一些发行版具有查找哪个包包含文件的命令:
曼德里瓦
urpmf库<somelib>.so
将列出包含名为lib<somelib>的文件的所有包。因此,必须安装以-devel结尾的包
Debian公司
安装apt-file实用程序(apt-get-install-apt-file),然后
apt-file搜索库<somelib>.so
将列出包含名为lib<somelib>的文件的所有包。因此,必须安装以-dev结尾的包
SuSE公司
SuSE将gtk-devel-libs安装在/opt/gnome/lib(或用于64位的/opt/gnome/lib64)下,它不在标准的lib路径中。只需将其添加到/etc/fpc.cfg。(-Fl/opt/gnome/lib)。
基于源代码的分发和手动编译(LFS)
确保路径中有一个lib<somelib>.a,并且它包含正确的版本。要让链接器找到动态库,请创建一个名为lib<some lib>.so To lib<some-lib><version>-x,y.so的符号链接(和/或对于静态库;lib<somet-lib>.a To lib<seme-lib><version>-x,y.a)。
自由BSD:作为基于源代码的发行版,还要确保在fpc.cfg和/或Lazarus库路径中有-Fl/usr/local/lib。请记住,GTK1.2在FreeBSD下以“gtk12”作为包名。(与glib相同)注意:这一点最近有所改变。最新的端口也有gtk-12和glib-12。您可能会遇到这个问题,因为FPC需要“更少”的,您需要将它们符号化:
#作为root
光盘/usr/local/lib&&ln-s libglib-12.so libglib12.so光盘/usr/X11R6/lib&&ln-s libgtk-12.so libgtk12.so光盘/usr/X11R6/lib&&ln-s libgdk-12.so libgdk12.so
NetBSD公司:作为基于源代码的发行版,还要确保在fpc.cfg和/或Lazarus库路径中有-Fl/usr/pkg/lib
费多拉:在“添加/删除软件”面板中搜索:“gtk2-devel”,“glibc-devel”(请看这里),“libx11-devel”

我在链接过程中收到一条警告:警告:“crtbeginS.o”(或“crtendS.o”)未找到

实际的文件名也可能是“crtbbegin.o”或“crtend.o”
在大多数情况下,链接不会失败。
下面是如何找到该文件的位置(您需要安装gcc,并且gcc需要以与fpc相同的体系结构为目标),并告诉fpc(它告诉链接器):

巴特@simenon~$gcc—打印文件名crtbeginS.o/usr/lib/gcc/x86_64-linux-gnu/5/crtbeginS。o个

将路径添加到fpc.cfg中:

#gcclib的路径#ifdef cpui386#-如果您有32位fpc,请使用Fl/usr/lib/gcc/x86_64-linux-gnu/5:在此处填写正确的路径#结尾#ifdef cpux86_64-Fl/usr/lib/gcc/x86_64-linux-gnu/5#结尾

注意:在Linux上,默认的(外部)链接器是ld。这是linux发行版的一部分,而不是FreePascal的一部分或用FreePascal构建的。

如何将Kylix 2项目转换为Lazarus项目?

几乎与将Kylix项目转换为Delphi/VCL项目的方式相同。

LCL(Lazarus组件库)试图与Delphi的VCL兼容。Kylix的CLX尝试与QT兼容。以下是一些一般提示:

  • 重命名所有使用的CLX Q单元,如QForms、QControls、QGraphics。。。到VCL对应项中:窗体、控件、图形。。。
  • 将LResources添加到每个表单源的uses部分
  • 将所有.xfm文件重命名或复制为.lfm文件。
  • 将.dpr文件重命名或复制为.lpr文件。
  • 将“Interfaces”添加到.lpr文件的uses部分。
  • 删除{$R*.res}指令
  • 删除{$R*.xfm}指令
  • 将{$modeobjfpc}{$H+}或{$modedelphi}{$H+}指令添加到.pas和.lpr文件中
  • 将初始化节添加到每个表单源的末尾,并为.lrs文件(Lazarus资源文件)添加include指令:
初始化
{$I单元1.lrs}
可以通过以下位置的lazers工具创建.lrs文件:(lazarusdir)/tools/lazres。
例如:/激光装置1.lrs装置1.lfm
  • 修复差异。LCL尚不支持VCL的所有属性,CLX也不完全兼容VCL。
  • 为了使其更加独立于平台,请减少单元库(已弃用)引用,并尽可能使用baseunix/unix等本地FPC单元进行替换。这对于支持linux/x86以外的其他目标(包括macOS、FreeBSD和linux/x86_64)是必要的

编译lazarus时,编译器找不到单元。例如:gtkint.pp(17,16)致命:找不到单位GLIB

1.检查干净的重建:进行“全部清理”

2.检查编译器的版本是否正确(2.0.4或更高版本)

3.检查编译器是否使用了正确的配置文件。正常安装会创建/etc/fpc.cfg。但是fpc还搜索~/.ppc386.cfg、~/.fpc.cfg和/etc/ppc386.cf,并且只使用它找到的第一个。

提示:您可以看到哪个配置文件与“ppc386-vt bogus”一起使用
删除任何ppc386.cfg,因为它确实已过时。

4.检查配置文件(/etc/fpc.cfg)是否包含指向fpc库的正确路径。必须有这样三行:

-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl-Fu/usr/lib/fpc/$fpcversion/unities/$fpctarget/*
这些路径的第一部分(/usr/lib/fpc)取决于您的系统。在某些系统上,例如/usr/local/lib/fpc/。
提示:您可以使用“ppc386-vt伪”查看搜索路径

5.检查配置文件(/etc/fpc.cfg)是否不包含指向lcl源文件(.pp、.pas)的搜索路径:

禁止:-Fu(lazarus_source_directory)/lcl禁止:-Fu(lazarus_source_directory)/lcl/interfaces/gtk
如果您想为所有fpc项目添加lcl,请确保这两个路径如下所示,并位于上述fpc-lib路径之后:
-Fu(lazarus_source_directory)/lcl/units/$fpctarget-Fu(lazarus_source_directory)/lcl/units/$fpctarget/gtk

6.检查fpc-lib目录中是否存在缺少的单元(glib.ppu)。例如,gtk.ppu可以在/usr/lib/fpc/$fpcversion/units/i386-linux/gtk/中找到。如果它不存在,则fpc库已损坏,应重新安装。

7.检查源是否位于NFS装入的目录中。在某些情况下,NFS会错误地更新创建的文件。请尝试将源代码移到非NFS目录中并在那里编译。

8.如果仍未成功,请尝试使用samplecfg脚本,如下所示:

#光盘/usr/lib/fpc/版本/

#苏多/samplecfg/usr/lib/fpc/\$版本/等

灯泡 注:不要在etc之后使用斜杠(“/”),因为如果这样做,系统将创建一个文件夹/等/fpc.cfg/fpc.cfg事实上,我们希望samplecfg生成一个文件/等/fpc.cfg,而不是文件夹/等/fpc.cfg.

我已经安装了二进制版本,但在编译一个简单的项目时,Lazarus给出了:致命错误:找不到单元控件

可能您使用的是比用于构建拉扎鲁双星。最好的解决方案是下载源代码并编译拉扎勒斯手动操作。您可以下载源快照或获取源通过svn:

猛击svn校验http://svn.freepascal.org/svn/lazarus/trunk拉扎勒斯光盘拉扎勒斯使全部干净

确保Lazarus获得新的源目录:环境->常规选项->文件->Lazarus目录顶部

Lazarus编译,但链接失败,原因是:找不到libgdk-pixbuf

安装gtk1.x的gdk-pixbuf库:

在哪里可以找到gdk-pixbuf库:

RPM(RPM):https://rpmfind.net/linux/rpm2html/search.php?query=gdk-pixbuf&submit=搜索+&系统=架构(&A)=

Debian软件包:libgdk-pixbuf-dev

资料来源:ftp://ftp.gnome.org/pub/gnome/unstable/sources/gdk-pixbuf/

Ubuntu 8.10:

如果使用GTK 2.0编译Lazarus,则会出现“libgdk-pixbuf2.0”未找到错误。只需使用apt-on安装libgtk2.0-dev这种方式:

apt-get安装libgtk2.0-dev

我有SuSE,我得到了/usr/bin/ld:cannot find-lgtk Error:Error while linking

较旧的SuSE版本(SuSE 11之前)将gtk-devel库安装在/opt/gnome/lib(或64位的/opt/gonime/lib64)下,该库不在标准库路径中。只需将其添加到/etc/fpc.cfg(-Fl/opt/gnome/lib)。

我有Kubuntu,我得到了/usr/bin/ld:cannot find-lgtk-x11-2.0

您可以使用QT或GTK2后端。默认值为GTK2。对于GTK2,安装kubuntu包libgtk2.0-dev公司.

安装组件后,Lazarus崩溃,出现运行时错误211

安装组件后,Lazarus崩溃,并显示以下消息:

在初始化cthreads之前已经使用了线程。将cthreads作为uses子句中的第一个单元之一。运行时错误211,$006E188

我该如何解决这个问题?

新安装的组件正在使用线程。*nix上的FPC不会自动包含线程支持,但它必须初始化。此初始化在cthreads单元中完成。每个使用组件的应用程序都需要将此单元添加到主程序的uses子句中。拉撒路本身也不例外。这可以通过两种方式实现:

1) 打开包裹。在包编辑器中单击选项。在页面下方用法添加到习俗选项-dUseC线程。然后重新生成IDE。这样,unix下的IDE将自动使用cthreads单元,并初始化cthread。

2) 为了避免修改包,可以直接使用FPC编译器选项。打开菜单工具->配置“build Lazarus”。将显示“Configure build Lazarus”对话框;在字段“选项:”中键入-事实线索然后按“确定”按钮。下一步是安装软件包。Lazarus将使用选项-Facthreads构建,这意味着它将把主程序视为第一个使用子句的单元cthreads。

提示:可能旧的(非崩溃的)Lazarus可执行文件存储为Lazarus.old,与崩溃的Lazaru可执行文件位于同一目录中。

另请参见多线程应用程序教程#多线程应用所需的单元

当我用线程运行程序时,我得到运行时错误232

完整的错误消息是:

此二进制文件没有编译的线程支持。使用程序中的线程驱动程序重新编译应用程序子句之前使用线程的其他单元。运行时错误232

解决方案:将cthreads作为第一个单元添加到主程序的uses子句中,通常是.lpr文件。

我有Ubuntu Breezy/Mandriva KDE3,我在Lazarus IDE中的字体看起来太大了

如果Lazarus是用Gtk1.2编译的,Gnome Preferences/Font中的设置没有任何效果它们与Gtk2有关。您可以尝试此解决方案:在主目录中创建一个名为.gtkrc.mine的文件(如果它不在那里)并添加这些行:

样式“default-text”{fontset=“-*-变量-中等-正态-*-100-*-*-*-iso8859-1\-*-helvetica-midium-r-正常--*-100-*-*-**-*-*“}类“GtkWidget”样式“default-text”

如果这还不够,请尝试创建一个.gtkrc符号链接到.gtkrc.mine。它在Xubuntu 7.10,Mandriva 2009.0 KDE3下以这种方式工作。

我的gtk程序如何使用自定义rc文件?

选项a)命名rc文件您的程序.gtkrc并将其放在可执行文件所在的同一目录中。

选项b)使用单位GtkInt公司然后打电话GTK小工具集。设置RCFilename('your_preferred_rc_file');最好在之前完成应用。初始化在.lpr文件中{$IFDEF LCLGtk}.

选项c)使用单位gtk2型然后打电话gtk_rc_parse(“您的rc_file”);gtk _ rc_修复_全部;.

我有Ubuntu,由于缺少库,我无法为Gtk2编译

Ubuntu有一个问题,就是即使安装了库,也无法创建所有需要的符号链接。确保在尝试链接Gtk2时所有缺少的库都有相应的链接。例如,您可能需要执行以下操作:

光盘/用户/库sudo ln-s libgdk-x11-2.0.so.0 libgtk-x11-20.so

确保创建了[whateh].so符号链接并指向实际的库。

Lazarus在Linux和Windows上的运行方式不同。我需要知道什么?

如果使用readln();和writeln();对于输入和输出,控制台窗口(有时称为终端窗口)不会像Windows那样弹出。您需要使用“查看-调试窗口-终端输出”访问此窗口。与Windows不同,您不能使用退格键更正键入错误。数字键盘上的“Enter”键也可能不起作用,具体取决于IDE所针对的小部件集。小心键入!

因为Linux是区分大小写的,所以在引用或访问文件时需要注意大小写。

窗户

当我循环/重建编译器时,我得到

指定的名称无法识别为内部或外部命令、可操作程序或批处理文件。>&此时出乎意料

在编译器目录中有一个名为make.cmd的OS2脚本文件。不同版本的Windows也将其视为脚本文件,因此请删除它,因为OS2所需的内容会成为Windows上的障碍。

品牌[3]:/ppc1.exe:找不到命令

不知怎的,make迷失了方向(原因不明)。尝试使用basedir集进行循环,如:

使循环BASEDIR=your_fpc_source_dir_here编译器

当我试图制造拉撒路时,我得到了:

make.exe:***接口:没有这样的文件或目录(ENOENT)。Stop.make.exe:***[interfaces_all]错误2

你需要升级你的品牌。

makefile:27:***您需要GNU-utils包才能使用此makefile。停止。

确保没有在名称中包含空格的路径中安装FPC。这个Makefile不支持它。

我怎样才能给我的程序一个像Lazarus那样的XP?

项目->项目选项->选中“使用清单启用主题”。

当我运行在Lazarus中创建的Windows程序时,它以DOS窗口开始

在编译器的命令行上或在Lazarus IDE中指定-WG参数(Windows GUI),选中编译器选项对话框(项目菜单->编译器选项->配置和目标->目标操作系统特定选项)上的Windows GUI复选框。

macOS操作系统

为什么编译项目会因“unknown section attribute:no_dead_strip”而失败?

Xcode 1.5之前的汇编程序和链接器不支持死代码剥离(适用于macOS 10.3.9)。禁用编译器选项:

  • 代码>单元样式>智能链接(-CX)
  • 和链接>链接样式>链接智能(-XX)

Xcode 3.1及更高版本

Xcode 3.1(2007,Leopard 10.5)及更高版本中的macOS链接器不支持剥离连接到汇编器和链接编辑器输出的符号表。链接器支持剥离,仅适用于32位可执行文件,最高可达Xcode 2.5(2005年,Tiger 10.4)。

编译可执行文件后,您需要手动运行strip命令行实用程序。

调试

请参阅此处了解macOS下的调试器问题

许可

我可以用Lazarus进行商业应用吗?

是的,LCL是根据LGPL例外,它允许您静态链接到它,而无需释放应用程序的源代码。LCL的修改和增强必须与源一起分发。Lazarus,IDE,根据GPL获得许可。LCL只包含名为“LCL”的目录中的代码,其他代码可能不包含在该语句中。

为什么有些组件被限制在商业应用中使用?

Lazarus附带由第三方开发的其他组件。这些许可证属于其他各种许可证。如果您希望使用它们,则需要在这些包的源文件中查看许可证。大多数第三方组件都位于“组件”目录中。

我如何知道组件是否是LCL的一部分?

所有LCL单元都在“LCL”目录中。可以找到属于LCL的单元列表在这里。如果代码使用了本页中未列出的单位,则可能使用了不属于LCL的组件。

我可以为Lazarus制作商业插件吗?

是的,IDE的IDEIntf部分是在LGPL下许可的,但有相同的例外,因此此部分中的共享数据结构不会强制您在GPL下许可插件或设计时包。您可以自由选择任何许可的插件;我们不想限制你的选择。因此,允许使用非GPL兼容的插件。注意,不允许发布带有这些非GPL兼容插件的预编译Lazarus;然而,我们并不认为这是一个严重的限制,因为重新编译Lazarus很容易。

使用论坛

在论坛中提问的正确方式是什么?

首先也是最重要的:始终要提到您正在使用的Lazarus版本、Free Pascal版本、Widgetset、CPU架构和操作系统(完整版本)!不要只说你在使用“最新版本”;请说明确切的版本号。对于快照,修订号和/或日期也很重要。

当问编程问题时,始终尝试包含一些演示问题的源代码。请用[code=pascal]将代码括起来。。。[/code]标记(或使用论坛帖子编辑器工具栏中的“插入代码”按钮)。如果需要,可以将完整的程序附加为zip文件。使用Lazarus/Project/Publish-Project来帮助实现这一点。

如果代码出错,始终指定错误是什么在大多数情况下,只需复制编译器/调试器/程序所说的内容就足够了。如果错误发生在运行时,请在编译时使用-gl并禁用函数内联,以便程序可以生成正确的回溯。

图像通常也很有用。您可以在中承载图像https://imageshack.com/以及其他类似的网站,然后发布链接。

尝试从较高的层次概述问题(你想实现什么目标)以及对问题的更详细的看法(你是如何努力实现目标的。通常,有一种简单得多的方法可以完成你可能不知道的事情。

最后,确保您已经搜索/阅读了相关文档(例如FPC文件和Lazarus wiki,参见例如。Lazarus文档。你也应该搜索论坛:其他人可能已经找到了解决类似问题的方法。如果你表示你已经做了一些功课,人们通常会更愿意提供帮助。

有关以智能方式提问的更多提示,请阅读以下内容:http://catb.org/esr/faqs/smart-questions.html

另请参见:如何使用论坛

版本编号

请参阅版本编号有关Lazarus分支和版本编号的说明,请参见第页。

旧Lazarus/FPC版本的问题

下面介绍了旧Lazarus/FPC版本的问题和升级注意事项。

通常,最好的解决方案是升级;请看各种发行说明

为什么Windows上的链接如此缓慢(Lazarus<0.9.24)?

灯泡 注:FPC 2.2和Lazarus 0.9.24修复了此问题。如果可以,请更新您的Lazarus。对于旧版本,请阅读下面的文本。

一般来说,Windows上的编译比其他平台需要更多的时间,因为Free Pascal使用的GNU Linker在此平台上速度较慢。这个问题只影响Windows,并且只在相对较旧的计算机(小于1Ghz)和RAM很少的计算机(128MB或更少)上出现。

此外,如果您使用智能链接LCL,链接速度会慢得多。有关这方面的研究位于:文件大小和智能链接

从FPC2.2开始,使用了一个内部链接器,大大缩短了链接时间。

旧的Lazarus不支持Windows风格的资源;转换lrs资源

旧版本的FPC(以及基于它的Lazarus)不支持Windows(.rc/.res)资源,但只支持LRS文件(LazarusResource文件)。请参见Lazarus资源由于0.9.30,Lazarus可以使用fpc资源。这意味着您可以删除表单的lrs文件并替换include指令{$I单元1.lrs}具有{$R*.lfm}.

防病毒软件

将Lazarus目录(以及您的项目所在的目录)排除在访问病毒扫描之外可能会有所帮助。

另请参见