Error identifier not found power

Ошибка при отладке Free Pascal Решение и ответ на вопрос 2038580

irishka_mmm

0 / 0 / 0

Регистрация: 16.08.2017

Сообщений: 18

1

Ошибка при отладке

11.09.2017, 21:24. Показов 4638. Ответов 4

Метки нет (Все метки)


Помогите отладить, ругается на power а точнее Error: identifier not found «power»

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
s,t:real;
i:integer;
begin
t:=1;
s:=1;
i:=0;
wrile abs(t) >=eps do
begin
i:=i+2;
t:=1/power(i+2,4);
s:=s+t
end;
writeln('S:   ',s:0:12);
end.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

11.09.2017, 21:24

Ответы с готовыми решениями:

Ошибка при отладке
del файл проекта здесь. Помогите что не хватает

Ошибка при отладке
запускаю программный код на отладку в Microsoft Visual C++ 2010 Express. выдает следующую ошибку в…

Ошибка при отладке
При отладке выдаёт ошибку: ссылка на не разрешённый внешний символ. А так же ошибка в стороке 49….

Ошибка при отладке
….
var S: String;
begin
S := Edit1.Text;
end;
….

Выше приведенный код вызывает ошибку…

4

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7502 / 4370 / 2776

Регистрация: 22.11.2013

Сообщений: 12,506

Записей в блоге: 1

11.09.2017, 21:36

2

Правильно ругается. power определена в модуле math, а он у вас не подключен (uses math; ).

Добавлено через 1 минуту
Но обычно подобные задания предполагают использование рекуррентных формул (когда следующий член последовательности вычисляется от предыдущего, а не заново).

Добавлено через 1 минуту
4-ю степень легко получить как квадрат квадрата Sqr(Sqr(i)).



0



346 / 330 / 101

Регистрация: 03.02.2013

Сообщений: 1,000

13.09.2017, 22:13

3

4-ю степень легко получить как квадрат квадрата Sqr(Sqr(i))

если не изменяет память power грузит в SSE/SSE2, что очень хорошо для распараллеливания в процессах, потом sqr(sqr(i)) может обломиться перегрузив word/dword/qword на вполне небольших числах, найти такую ошибку потом не просто, что double не светит и близко



0



irishka_mmm

0 / 0 / 0

Регистрация: 16.08.2017

Сообщений: 18

14.09.2017, 07:28

 [ТС]

4

Ребята, спасибо за помощь, немного подправила и вроде получилось:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Const
   eps=1e-8;{точность}
var
s:real; {сумма}
t:real; {значение текущего члена ряда}
i:ineger; {номер члена ряда}
begin
   t:=1;
   s:=0;
   i:=-1;
repeat
   inc(i,2);
   t:=1/sqr(sqr(i));
   writeln(‘Слагаемое:,t:0:12);
   s:=s+t;
until t < eps;
writeln(‘S:,s:0:12);
end.



0



bormant

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7502 / 4370 / 2776

Регистрация: 22.11.2013

Сообщений: 12,506

Записей в блоге: 1

14.09.2017, 08:06

5

дабы не зависеть от режима компиляции (а в зависимости от него Integer может быть SmallInt или LongInt), стоит явно указать:

Pascal
6
  i: LongInt;

Для eps=1e-8 разрядности хватает. Хватит до 4.69e-10 (i=215).



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

14.09.2017, 08:06

5

В этом разделе описаны все сообщения, которые могут случиться при обработке символов, то сеть все, что происходит при обработке имён процедур и переменных.

Сообщение

Описание

Error: Identifier not found «Сообщение»

Компилятору неизвестен этот символ. Обычно появляется, когда вы делаете орфографическую ошибку в имени переменной или процедуры, или если вы забыли объявить переменную.

Fatal: Internal Error in SymTableStack()

Внутренняя ошибка произошла в компиляторе. Если вы обнаружите такую ошибку, пожалуйста, контактируйте с разработчиками и попытайтесь предоставить точное описание обстоятельств, при которых произошла эта ошибка.

Error: Duplicate identifier «Сообщение»

Идентификатор уже был объявлен в текущей области видимости.

Hint: Identifier already defined in Сообщ1 at line Сообщ2

Идентификатор уже был объявлен в предыдущей области видимости.

Error: Unknown identifier «Сообщение»

Обнаружен необъявленный идентификатор, или он используется за пределами области видимости, где он был объявлен.

Error: Forward declaration not solved «Сообщение»

Это может произойти в двух случаях:

Вы объявили функцию в интерфейсной части, или с директивой forward, но не определили её в исполняемой части.

Вы ссылаетесь на тип, который не объявлен в текущем блоке type.

Error: Error in type definition

Это ошибка в определении нового типа массива. Один из разделителей диапазона в массиве объявлен неправильно. Например, Array [1..1.25] вызовет эту ошибку, так как в индексах массивов могут быть только порядковые типы, а 1.25 – это вещественный тип.

Error: Forward type not resolved «Сообщение»

Символ был предварительно определён, но его объявление не было найдено.

Error: Only static variables can be used in static methods or outside methods

Статический метод объекта может быть доступен только статическим переменным.

Fatal: record or class type expected

Переменная или выражение не являются типом record или class.

Error: Instances of classes or objects with an abstract method are not allowed

Вы пытаетесь создать экземпляр класса, который имеет не перегружаемые абстрактные методы.

Warning: Label not defined «Сообщение»

Метка была объявлена, но не определена.

Error: Label used but not defined «Сообщение»

Метка была объявлена и использована, но не определена.

Error: Illegal label declaration

Эта ошибка не должна никогда появляться. Это случается, если метка определена вне процедуры или функции.

Error: GOTO and LABEL are not supported (use switch -Sg)

Вы должны использовать опцию -Sg для компиляции программы, которая имеет метки и операторы goto. По умолчанию label (метка) и goto не поддерживаются.

Error: Label not found

Было обнаружено goto Метка, но метка не была объявлена.

Error: identifier isn’t a label

Идентификатор, указанный после goto, не является меткой.

Error: label already defined

Вы определили метку дважды. Вы можете определить метку только один раз.

Error: illegal type declaration of set elements

Объявление множества содержит неправильное определение типа.

Error: Forward class definition not resolved «Сообщение»

Вы объявили класс, но не определили его.

Hint: Unit «Сообщ1» not used in Сообщ2

Модуль, на который есть ссылка в разделе uses, не используется.

Hint: Parameter «Сообщение» not used

Идентификатор был объявлен (локально или глобально), но не был использован (локально или глобально).

Note: Local variable «Сообщение» not used

Вы объявили, но не использовали переменную в процедуре или функции.

Hint: Value parameter «Сообщение» is assigned but never used

Идентификатор был объявлен (локально или глобально) и ему было присвоено значение, но после этого он не используется (локально или глобально).

Note: Local variable «Сообщение» is assigned but never used

Переменная в процедуре или функции объявлена и ей присвоено значение, но после этого она не используется.

Hint: Local Сообщ1 «Сообщ2» is not used

Локальный идентификатор не используется.

Note: Private field «Сообщ1.Сообщ2» is never used

Указанное приватное поле определено, но никогда не используется в коде.

Note: Private field « Сообщ1.Сообщ2» is assigned but never used

Указанное приватное поле определено и ему присвоено значение, но оно никогда не читается.

Note: Private method « Сообщ1.Сообщ2» never used

Указанный приватный метод определен, но никогда не используется в коде.

Error: Set type expected

Переменная или выражение не являются множеством. Это случается при использовании оператора in.

Warning: Function result does not seem to be set

Вы можете получить это предупреждение, если компилятор думает, что функция возвращает значение, которое не является множеством. Это не отображается для ассемблерных процедур или процедур, которые содержат ассемблерные блоки.

Warning: Type «Сообщение» is not aligned correctly in current record for C

Массивы С, размер которых не кратен 4, будут выровнены для С— структур.

Error: Unknown record field identifier «Сообщение»

Поле не существует в определении записи/объекта.

Warning: Local variable «Сообщение» does not seem to be initialized

Это сообщение отображается, если компилятор думает, что локальная переменная будет использована (то есть появится в правой части выражения) до того, как она была инициализирована (то есть до того, как она появилась в левой части оператора присваивания).

Warning: Variable «Сообщение» does not seem to be initialized

Это сообщение отображается, если компилятор думает, что переменная будет использована (то есть появится в правой части выражения) до того, как она была инициализирована (то есть до того, как она появилась в левой части оператора присваивания).

Error: identifier idents no member «Сообщение»

Эта ошибка генерируется, если с идентификатором записи, поля или метода выполняется присваивание, в то время как он не определён.

Hint: Found declaration: Сообщение

Вы получите это сообщение, если используете опцию -vh. В случае перегрузки процедуры, которая не была найдена. В сообщении будут перечислены все кандидаты перегружаемых процедур со списком их параметров.

Error: Data element too large

Вы получите это сообщение, если вы объявили элемент с данными, размер которых превышает принятый лимит (2 Гб для процессоров 80386+/68020+).

Error: No matching implementation for interface method «Сообщение» found

Найден метод, который не соответствует методу интерфейса. Проверьте типы аргументов и тип результата методов.

Warning: Symbol «Сообщение» is deprecated

Это означает, что используется идентификатор (переменная, процедура и т.п.), который объявлен deprecated. Идентификаторы deprecated могут уже не быть доступными в новых версиях модуля/библиотеки. Избегайте использовать эти идентификаторы, насколько это возможно.

Warning: Symbol «Сообщение» is not portable

Это означает, что используется идентификатор (переменная, процедура и т.п.), который объявлен platform. Значение этого идентификатора зависит от платформы и не должно использоваться, если исходный код должен быть переносимым.

Warning: Symbol «Сообщение» is not implemented

Это означает, что используется идентификатор (переменная, процедура и т.п.), который объявлен unimplemented. Этот идентификатора определён, но уже не выполняется на указанной платформе.

Error: Can’t create unique type from this type

Только простые типы, такие как порядковые, вещественные и строки поддерживаются, если тип переопределён с помощью type НовыйТип = type СтарыйТип;.

Hint: Local variable «Сообщение» does not seem to be initialized

Это сообщение появляется, если компилятор думает, что локальная переменная будет использована (то есть появится в правой части выражения), в то время как она ещё не инициализирована (то есть не появлялась в левой части присваивания).

Hint: Variable «Сообщение» does not seem to be initialized

Это сообщение появляется, если компилятор думает, что переменная будет использована (то есть появится в правой части выражения), в то время как она ещё не инициализирована (то есть не появлялась в левой части присваивания).

Warning: Function result variable does not seem to initialized

Это сообщение появляется, если компилятор думает, что переменная результата функции будет использована (то есть появится в правой части выражения) перед её инициализацией  (то есть перед тем, как она появится в левой части присваивания).

Hint: Function result variable does not seem to be initialized

Это сообщение появляется, если компилятор думает, что переменная результата функции будет использована (то есть появится в правой части выражения) перед её инициализацией  (то есть перед тем, как она появится в левой части присваивания).

Warning: Variable «Сообщение» read but nowhere assigned

Вы прочитали значение переменной, но нигде не присвоили ей значение.

Hint: Found abstract method: Сообщение

Когда выводится предупреждение о создании класса/объекта с абстрактными методами, вы получаете эту подсказку, которая поможет вам найти неправильный метод.

Warning: Symbol «Сообщение» is experimental

Это означает, что используется идентификатор (переменная, процедура и т.п.), который объявлен как experimental. Экспериментальные идентификаторы могут быть удалены или изменят семантику в будущих версиях. Избегайте использовать эти идентификаторы, насколько это возможно.

Warning: Forward declaration «Сообщение» not resolved, assumed external

Это сообщение появляется, если вы объявили функцию в интерфейсе модуля в режиме macpas, не выполнили её.

Warning: Symbol «Сообщение» is belongs to a library

Это означает, что используется идентификатор (переменная, процедура и т.п.), который объявлен как library. Такие идентификаторы могут быть недоступны в других библиотеках.

Warning: Symbol «Сообщ1» is deprecated: «Сообщ2»

Это означает, что используется идентификатор (переменная, процедура и т.п.), который объявлен как deprecated. Такие идентификаторы могут быть недоступны в будущих версиях модуля/библиотеки. Избегайте использовать эти идентификаторы, насколько это возможно.

Error: Cannot find an enumerator for the type «Сообщение»

Это означает, что компилятор не может найти соответствующий нумератор для использования в цикле for. Для создания нумератора вам необходимо определить оператор нумератора или добавить метод public или published GetEnumerator для класса или объекта.

Error: Cannot find a «MoveNext» method in enumerator «Сообщение»

Это означает, что компилятор не может найти метод public MoveNext с возвращаемым типом Boolean в классе нумератора или объекте.

Error: Cannot find a «Current» property in enumerator «Сообщение»

Это означает, что компилятор не может найти свойство public Current с возвращаемым типом в классе нумератора или объекте.

Error: Mismatch between number of declared parameters and number of colons in message string.

In Objective-C, a message name automatically contains as many colons as parameters. In order to prevent mistakes when specifying the message name in FPC, the compiler checks whether this is also the case here. Note that in case of messages taking a variable number of arguments translated to FPC via an array of const parameter, this final array of const parameter is not counted. Neither are the hidden self and _cmd parameters.

Note: Private type ”arg1.arg2” never used

The indicated private type is declared but is never used in the code.

Note: Private const ”arg1.arg2” never used

The indicated private const is declared but is never used in the code.

Note: Private property ”arg1.arg2” never used

The indicated private property is declared but is never used in the code.

Warning: Unit ”arg1” is deprecated

This means that a unit which is declared as deprecated is used. Deprecated units may no longer be available in newer versions of the library. Use of this unit should be avoided as much as possible.

Warning: Unit ”arg1” is deprecated: ”arg2”

This means that a unit which is declared as deprecated is used. Deprecated units may no longer be available in newer versions of the library. Use of this unit should be avoided as much as possible.

Warning: Unit ”arg1” is not portable

This means that a unit which is declared as platform is used. This unit use and availability is platform specific and should not be used if the source code must be portable.

Warning: Unit ”arg1” is belongs to a library

This means that a unit which is declared as library is used. Library units may not be available in other libraries.

Warning: Unit ”arg1” is not implemented

This means that a unit which is declared as unimplemented is used. This unit is defined, but is not yet implemented on this specific platform.

Warning: Unit ”arg1” is experimental

This means that a unit which is declared as experimental is used. Experimental units might disappear or change semantics in future versions. Usage of this unit should be avoided as much as possible.

Error: No complete definition of the formally declared objcclass ”arg1” is in scope

Objecive-C classes can be imported formally, without using the the unit in which it is fully declared. This enables making forward references to such classes and breaking circular dependencies amongst units. However, as soon as you wish to actually do something with an entity of this class type (such as access one of its fields, send a message to it, or use it to inherit from), the compiler requires the full definition of the class to be in scope.

Error: Gotos into initialization or finalization blocks of units are not allowed

Gotos into initialization or finalization blockse of units are not allowed.

Error: Invalid external name ”arg1” for formal class ”arg2”

Error: Complete class definition with external name ”arg1” here

When a class is declared using a formal external definition, the actual external definition (if any) must specify the same external name as the formal definition (since both definitions refer to the same actual class type).

Warning: Possible library conflict: symbol ”arg1” from library ”arg2” also found in library ”arg3”

Some OS do not have library specific namespaces, for those OS, the function declared as ”external ’libname’ name ’funcname’”, the ’libname’ part is only a hint, funcname might also be loaded by another library. This warning appears if ’funcname’ is used twice with two different library names.

I have written a code with 8 procedures and 2 functions.

program solar;
var
    solararray:array[1..1000000] of longint;
    solartrue:array[1..1000000] of boolean;
    solarnumber:array[1..1000000] of shortint;
    n,counter,counter2,counter3,number,maxn:longint;
    fin,fout:text;

procedure Initialize;
    begin
    assign(fin,'solar.in');
    assign(fout,'solar.out');
    reset(fin);
    rewrite(fout);
    end;

procedure FillArray;
    begin
    read(fin,n);
    for counter:=1 to n-1 do
        read(fin,solararray[counter]);
    close(fin);
    end;

procedure First;
    begin
    if solararray[1] < solararray[2]
    then solartrue[1]:=Test_Up(1)
    end;

procedure Other;
    begin
    for counter:=2 to n-1 do
        begin
        if Test_Up(counter) And Test_Down(counter)
        then solartrue[counter]:=true
        else solartrue[counter]:=false;
        end;
    end;

procedure Last;
    begin
    if solararray[n] > solararray[n-1]
    then solartrue[n]:=Test_Down(n)
    end;

function Test_Up (place : longint) : boolean;
    var
    istrue:boolean;
    begin
    for counter2:=1 to n-1 do
        begin
        if solararray[place] < solararray[counter2]
        then istrue:=true
        else;
            begin
            istrue:=false;
            break;
            end;
        end;
    end;

function Test_Down (place : longint) : boolean;
    var
    istrue:boolean;
    begin
    for counter3:=place-1 downto 1 do
        begin
        if solararray[place] > solararray[counter3]
        then istrue:=true
        else;
            begin
            istrue:=false;
            break;
            end;
        end;
    end;

procedure FindTrues;
    begin
    number:=0;
    for counter:=1 to n do
        begin
        if solartrue[counter]
        then
            begin
            number:=number+1;
            solarnumber[number]:=solararray[counter];
            end
        end;
    end;

procedure Select;
    begin
    if number=0
    then write(fout,'NOT FOUND')
    else FindBigger;
    end;

procedure FindBigger;
    begin
    maxn:=solarnumber[1];
    for counter:=1 to number do
        begin
        if solarnumber[counter] > maxn
        then maxn:=solarnumber[counter]
        end;
        write(fout,maxn);
    end;

begin
    Initialize;
    FillArray;
    First;
    Other;
    Last;
    FindTrues;
    Select;
    close(fout);
    halt(0);
end.

solar.in looks like the following:

10

3

2

4

1

5

7

8

9

10

8

When I run the program five errors occur:

 - solar.pas (28,28) Error: Identifier not found "Test_Up"
 - solar.pas (35,13) Error: Identifier not found "Test_Up"
 - solar.pas (35,36) Error: Identifier not found "Test_Down"
 - solar.pas (44,30) Error: Identifier not found "Test_Down"
 - solar.pas (97,17) Error: Identifier not found "FindBigger"

Why it happens and how can I fix it?

Thanks in advance.

When you add controls to the form they automagically get added under the form class, in your case they would appear under Tvendas_menu = class(TForm).

One possibility of the error could be because the line Start is missing, you should have something like:

type
  Tvendas_menu = class(TForm)
    Start: TPanel;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

To resolve this, try adding the line Start: TPanel; like above if it is not present.

One other option you have is to view the form in text view (.lfm for Lazarus and .dfm for Delphi) and find the reference block for Start, it may look something like:

object Start: TPanel
  Left = 152
  Top = 248
  Width = 185
  Height = 41
  Caption = 'Start'
  TabOrder = 1
end

Delete that and then return back to Form view.

Then you can try adding a new panel to the form and naming it Start, then you just need to link your event handlers back to the new control.

As a side tip, naming a control Start is not really very useful, maybe think of a better named identifier such as panStart.



العربية (ar)



Deutsch (de)
English (en)

español (es)


français (fr)
magyar (hu)

italiano (it)
日本語 (ja)
한국어 (ko)



português (pt)

русский (ru)
slovenčina (sk)





中文(中国大陆)‎ (zh_CN)
中文(台灣)‎ (zh_TW)

Note-icon.png

Примечание: Этот FAQ может быть устаревшим в некоторых частях.

Общее

Почему получаемые бинарные файлы очень большие?

Бинарные файлы очень большие из-за того, что включают в себя много отладочной информации для использования в отладчик gdb (GNU Debugger).
Компилятор имеет настройку для удаления отладочной информации из исполняемого файла (-Xs), но из-за ошибки в компиляторе (версия 2.0.2 и ниже) она не работает корректно. Ошибка исправлена в версиях компилятора 2.0.4 и выше.

Вы можете использовать программу «strip» для удаления отладочной информации из исполняемых файлов. Она находится в каталоге Lazarus’а: lazarusppbini386-win32.

Наберите «strip —strip-all <путь к исполняемому файлу>» в командной строке.

Если Вы хотите сделать Вашу программу очень маленькой, то Вы можете попробовать использовать UPX. UPX — это очень хороший exe-упаковщик. It includes no memory overhead due to in-place decompression. И также имеет очень быструю распаковку (~10 МБ/сек на Pentium 133).

Для использования upx наберите «upx <путь к исполняемому файлу>» в командной строке.

После использования strip и upx простая GUI программа на Lazarus’е получается:

  • ~ 700Кб на Linux
  • ~ 420Кб на Windows

Для более детальной информации о недостатках использования UPX обратитесь к статье Размер имеет значение.
Также нужно отметить, что «hello world» программы lazarus уже включают в себя множество возможностей, таких как:

  • Библиотеку работы с XML
  • Библиотеки для обработки файлов рисунков типа png, xpm, bmp и ico
  • Практически все виджеты Lazarus Component Library (LCL)
  • Все Runtime библиотеки Free Pascal

Всё это делает приложение большим, но это так же и включает всё, что может потребоваться нетривиальному приложению.

Начальный размер исполняемого файла Lazarus велик, однако растёт в дальнейшем довольно медленно. Проект на С++ (это для примера, но относится и к другим языкам / инструментальные средства тоже), сначала очень маленький (типа «Hello world»), но быстро растет по экспоненте, когда Вы добавляете дополнительные возможности, чтобы написать нетривиальное приложение.

Lazarus vs cpp.png

Краткое руководство по уменьшению размера Lazarus/FPC приложения (проверено в Lazarus 0.9.26)

  • 1. Project|Compiler Options|Code|Smart Linkable (-CX) -> Поставить галочку
  • 2. Project|Compiler Options|Linking|Debugging|Display Line Numbers in Run-time ErrorBacktraces (-gl) -> Убрать галочку
  • 3. Project|Compiler Options|Linking|Debugging|Strip Symbols From Executable (-Xs) -> Поставить галочку
  • 4. Project|Compiler Options|Linking|Link Style|Link Smart (-XX) -> Поставить галочку

Самые важные элементы, мне кажется, 2 и 3. Для простого приложения выполнимый размер должен теперь составить 1-3 Мбайта вместо 15-20 Мбайт. В этом пункте Вы можете также попробовать: Project|Compiler Options|Code|Optimizations|smaller, вместо Faster -> Поставить галочку (Предупреждение: это может уменьшить производительность),

  • 5. (Опционально) Запустите UPX <путь к исполняемому файлу> для сжатия вашего бинарника дополнительно в 2-3 раза (Предупреждение: как сказано выше, есть недостатки в использовании UPX).

УСТАРЕЛО: Почему компоновка такая медленная в Windows?

Эта проблема свойственна лишь старым версиям: FPC 2.2 и Lazarus 0.9.24. Пожалуйста обновите Лазарус. Всё написанное здесь относится только к старым версиям.

В общем, компоновка на Windows занимает больше времени, чем на других платформах, потому что GNU компоновщик под эту операционную систему очень медленный. FPC (2.2) использует этот компоновщик при сборке программ. Эта проблема возникает только на Windows и только на слабых компьютерах (с процессором частотой менее 1ГГц и/или оперативной памятью меньше 128 Мегабайт)

Также, если вы используете умную компоновку (smartlinking), общее время компиляции так же увеличиться. Подробнее об этом можно прочитать здесь: File size and smartlinking

Для решения этой проблемы, был разработан внутренний компоновщик. Он есть во всех версиях FPC, начиная с 2.2. Его использование позволило в значительной степени сократить общее время компиляции. Внутренний компоновщик используется только при компиляции для Windows системы.

Мне нужен ppc386.cfg или fpc.cfg?

Вам нужен только fpc.cfg. В нем указаны пути, по которым компилятор будет искать библиотеки.

Как я могу скомпилировать lazarus?

Нет ничего проще  :)

$ cd lazarus
$ make clean all

Как собирать LCL проекты без Lazarus-а?

  • В тех случаях, когда использование графической среды невозможно, вы можете воспользоваться утилитой командной строки: lazbuild.

Эта утилита используется для сборки проектов и lazarus-пакетов (packages).

  • Если вам нужно собрать LCL приложение без среды разработки и не используя lazbuild, вам необходимо добавить следующие строки в файл fpc.cfg
  # строчки начинающиеся с # можно не добавлять
  # это комментарии
  # пути для других модулей и компонентов 
 -Fu{Путь_к_лазарусу}/lcl/units/{целевая_система}
 -Fu{Путь_к_лазарусу}/components/units/{целевая_система}
Где {целевая_система} это системный префикс, указывающий для какой системы располагаются модули. Обычно этот префикс представляет собой пару имён «Процессор-ОСь», например i386-win32, i386-linux, i386-darwin.:

После добавления этих строк в конфигурационный файл, вызовете команду:
fpc myproject.lpr
myproject.lpr это имя основного файла проекта (модуль начинающийся с «program» или «library»). Но имя может быть другим, т.к. Лазарус не принуждает Вас использовать расширение .lpr.

Кроме того, если Ваш проект использует какие-либо особые настройки, вы можете получить командную строку для компиляции, используя меню в Лазарусе:
Проект->Параметры проекта…->Показать параметры
(параметров может быть очень много, удобно скопировать их в отдельный скрипт файл .bat или .sh);

Какая версия FPC требуется?

Версия 2.4.0 для всех операционных систем.

Я не могу скомпилировать Lazarus

  1. Проверьте версию компилятора
  2. Проверьте версию (fpc)библиотек, они должны быть той же версии
  3. Проверьте путь установки компилятора на наличие в нем пробелов. Пробелов в нем не должно быть!
  4. Проверьте наличие файла fpc.cfg, а не старого файла ppc386.cfg
  5. Проверьте также OS-dependent FAQs

При компиляции проекта возникает ошибка:

«Cannot find Unit interfaces». Как можно это исправить?

Ошибка возникает потомучто компилятор не может найти ‘interfaces.ppu’ или он найден, но он поврежден, неправильной версии или просрочен.

Этот модуль может находиться в {LazarusDir}lclunits{TargetCPU}-{TargetOS}{LCLWidgetSet}interfaces.ppu. Например: /home/username/lazarus/lcl/units/i386-linux/gtk/interfaces.ppu.

Убедитесь, что он только здесь. Если находятся несколько версий interfaces.ppu, то вы возможно получите неверную конфигурацию (к примеру добавлен каталог lcl в список путей поиска). Удалите все interfaces.ppu, оставьте только тот что в каталоге указаном выше.

Если вы выберете другой widgetset, то при пересборке lazarus, понадобится пересобрать LCL для этого widgetset.

Если ошибка возникает несмотря на то что ‘interfaces.ppu’ на месте — значит используется, иная compiler/rtl для компиляции проекта нежели для компиляции Lazarus IDE. Можно сделать одно из следующего:

  • Пересобрать LCL (или полностью Lazarus) с компилятором выбраным в Environmnent Options. Для этого можно кликнуть Tools -> Build Lazarus. Перед этим проверьте текущие настройки в Tools -> Configure Build Lazarus.
  • Поменять компилятор в Environment Options на тот что используется для компиляции Lazarus. Посмотрите внимательно также в Environment Options что используются корректный путь к каталогу Лазаря (Lazarus Directory) и к исходникам FPC. Убедитесь что есть только только один файл конфигурации fpc.cfg — он должен располагаться /etc/ для Linux/Unix или вместе с компилятором fpc под Windows. Попробуйте запустить «fpc -vt bogus» для того чтобы увидеть какой fpc.cfg используется на вашей системе. Мешающие копии обычно появляются при обновлении компилятора; они могут находится в домашнем каталоге или вместе с пересобраным новым компилятором. УДАЛИТЕ ИХ!!
  • Можно также попробовать сменить текущий widgetset проекта. Например, примерный проект «objectinspector» поставляемый с Лазарем поумолчанию использует gtk. Компиляция этого проекта наверняка выдаст «Can’t find unit interfaces» под Windows. Смена widgetset на default(Win32) в Project | Compiler Options… | LCL Widget Type (various) должно исправить это.

Когда я пытаюсь откомпилировать проект Delphi в lazarus, я получаю сообщение об ошибке

Ошибка на строке :{$R *.DFM}. Как мне решить эту проблему?

Lazarus (а точнее — Linux) не знает о таком понятии, как «ресурсы», и не может использовать некоторые связанные с ними понятия, пришедшие из Delphi/Win32. Однако, Lazarus использует методы, обеспечивающие совместимость с этими понятиями. Вы сможете использовать формы Delphi (файлы .dfm), если выполните следующие шаги:

  • Используйте текстовые версии .dfm-файлов. D5 и более поздние версии используют такие файлы по умолчанию. Если у вас более старые файлы, выполните следующее: нажмите ALT-F12 для просмотра кода формы в виде текста и скопируйте/вставьте текст. Если у вас есть текстовый .dfm-файл, просто скопируйте его содержание в .lfm-файл.
  • Создайте файл с помощью lazres (в меню lazarus/tools) следующей командой: lazres yourform.lrs yourform.lfm
  • Добавьте следующую строку в секцию initialization:
     initialization
     {$I yourform.lrs}

Пожалуйста, помните, что не все свойства объектов, описанные в dfm-файлах, поддерживаются Lazarus, и часть из них может вызвать падения IDE.

Примечание: Вы не получите этой ошибки, начиная с версии Lazarus 0.9.29 (SVN) при использовании FreePascal 2.4.0 и выше. Компилятор этой версии умеет включать такие ресурсы в исполняемый файл на всех платформах. Тем не менее, проблема несовместимости отдельных свойств от этого не исчезает.

Ошибка: ‘Identifier not found LazarusResources’.

При создании формы Lazarus автоматически добавляет некоторые необходимые модули в секцию uses вашего модуля, содержащего форму. После конвертации из Delphi в модуле могут отсутствовать необходимые ссылки. В данном конкретном случае вам необходимо добавить в секцию uses модуль LResources.

При обращении к событиям объектов, например OnClick объекта button, я получаю следующую ошибку: ERROR unit not found: stdCtrls

Убедитесь (Project -> Project Inspector),что ваш проект зависит от пакета ‘LCL’ и что вы установили исходники FPC.

Lazarus — это IDE (среда разработки) и библиотека визуальных компонентов LCL.
Все другие вещи, как IO, Database, FCL и RTL предоставляются FPC.
IDE нужны пути ко всем исходникам.

Пути к исходникам FPC могут быть установлены через:
Environment -> Environment Options -> Files -> FPC source directory
(Окружение -> Параметры -> Файлы -> Каталог исходного кода FPC).

Как внедрять содержимое небольшого файла в исполняемый файл? Как внедрять ресурсы?

Например,

/your/lazarus/path/tools/lazres sound.lrs sound1.wav sound2.wav ...

создаст sound.lrs из sound1.wav и sound2.wav.

Потом включите его *после* lrs-файла формы:

...
initialization
{$i unit1.lrs} // this is main resource file (first)
{$i sound.lrs} // user defined resource file

end.

В Вашей программе эти ресурсы можно использовать следующим образом:

Sound1AsString:=LazarusResources.Find('sound1').Value;

Что означают различные расширения файлов, используемые Lazarus?

Глава Lazarus Tutorial#The Lazarus files разъясняет назначение некторых расширений. Вот их краткий список:

*.lpi
файл с информацией о проекте Lazarus (в формате XML; содержит настройки, относящиеся к конкретному проекту)
*.lpr
программный файл Lazarus; содержит основной Pascal-код программы
*.lfm
файл формы Lazarus; содержит информацию обо всех объектах, размещённых на форме (хранится в специальном текстовом формате; связанные с объектами формы действия хранятся в одноимённом *.pas-файле)
*.pas или *.pp
модуль с Pascal-кодом (обычно связан с формой в одноимённом *.lfm-файле)
*.lrs
файл ресурсов Lazarus (это генерируемый файл; не является файлом ресурсом Windows).
Этот файл может быть создан с помощью утилиты lazres (в каталоге Lazarus/Tools) путё вызова из командной строки: lazres myfile.lrs myfile.lfm
*.ppu
скомпилированный модуль
*.lpk
информационный файл для пакета Lazarus (в формате XML; содержит настройки, относящиеся к конкретному пакету)

Когда я пишу var mytext: text;, чтобы объявить текстовый файл, я получаю ошибку «Unit1.pas(32,15) Error: Error in type definition». Как можно это исправить?

Класс TControl содержит свойство Text. В методе формы используется типText из модуля system. Вы можете использовать тип TextFile, который всего лишь является другим названием типа Text, или можете добавить модуль при объявлении (см. в примере):

  var
  MyTextFile: TextFile;
  MyText: System.Text;

Сходный конфликт имен существует и при связывании и закрытии текстового файла. TForm имеет методы assign и Close. Вместо них вы можете использовать AssignFile и CloseFile, или же добавлять имя модуля System (System.Close, System.Assign).

Я получаю ошибку при использовании Printer.BeginDoc

Модуль Printers должен быть добавлен в секцию uses.

Пакет Printer4Lazarus должен быть добавлен в зависимости Вашего проекта в IDE:
Project|Project Inspector|Add|New Requirement|Package Name:

Если пакета Printer4Lazarus нет в списке пакетов, то Вам нобходимо установить его. Пакет является частью установки Lazarus и может быть найден по следующему пути:
[каталог установки lazarus]componentsprinters

Если Вы используете стандартный путь для установки Lazarus’а, то [каталог установки larazus] находится:

  • Windows: c:lazarus
  • Linux: /usr/lib/lazarus

Данное решение также применимо, если Вы получаете исключения при использовании Printer.Printers

Почему TForm.ClientWidth/ClientHeight — это то же самое, что и TForm.Width/Height?

TForm.Width/Height не включают границ окна, поскольку не существует способа получить размер этих границ на всех платформах. Без надёжного способа LCL будет перемещать формы по всему экрану или бесконечно изменять их размер.

В конечном итоге, когда появится надёжный способ получения размера и позиции окна вместе с его границами для всех платформ, это будет изменено. Для сохранения совместимости со старыми LCL-формами, будет введён номер версии и использованы некоторые другие дополнительные методы.

Отладка

Как увидеть отладочные сообщения?

В модуле LCLProc в LCL есть две процедуры для вывода отладочных сообщений. Они называются:

  • DebugLn: которая работает также, как WriteLn, но принимает только строки.
  • DbgOut: которая работает также, как Write, но принимает только строки.

В обычных условиях сообщения выводятся в stdout. Если stdout закрыт (например когда приложение {$AppType Gui} или откомпилировано с ключом -WG под Windows), сообщения не выводятся никуда.

Отладочные сообщение могут также выводится в файл. Код инициализации модуля LCLProc проверяет командую строку Lazarus.exe’s на предмет наличия ключа ‘—debug-log=<file>’. Если этот ключ присутствует — весь последующий отладочный вывод направляется в <file>.

Если этого ключа нет, проверяется существование системной переменной окружения xxx_debuglog, где xxx — имя файла программы без расширения. Для Lazarus это будет lazarus_debuglog. Если такая переменная окружения существует, файл указанный в ней будет использован для вывода отладочных сообщений.
Пример: если вы сделаете:

set lazarus_debuglog=c:lazarusdebug.txt

то отладочные сообщения будут выводится в c:lazarusdebug.txt.

Так как это реализовано в lclproc, любое приложение использующее lclproc может использовать этот механизм вывода отладочных сообщений.

Отладка Lazarus-а
Наиболее полезно для Windows: Если вы хотите выводить сообщения в консоль, добавьте {$APPTYPE console} в lazarus.pp ; После чего перекомпилируйте Lazarus.

Как мне просмотреть значение свойств?

Вам нужно использовать самую последнюю версию FPC из исходников (2.5.1) или релиз 2.4.0. Любая версия позднее указанных, так же подойдёт.

Если Вы скомпилируете приложение, использую ключ -gw (отладочная информация dwarf), Вы сможете просмотреть значения свойств.

Внимание: это возможно, только для тех свойст, которые напрямую связан с членом класса, директива «read» указывает на переменную, а не метод.

Если свойство возвращает значение через функцию, то достаточно опасно проверять её значение. Риск заключается в том, что для проверки её значения требуется вызвать процедуру или функцию, что может привести к изменению других значений и/или данных. А это значит, что данные изменились в режиме отладки, и дальнейшее исполнение программы, будет отличаться от работы без отладчика.

Проверка свойства по результату функции (как описана выше), ещё не реализована.

Почему отладчик не показывает некоторые переменные или структуры (выдавая ошибки «no such symbol»/»incomplete type»)

Для решения проблем с:
— свойствами
— динамическими массивами
— переменными во вложенных процедурах
— «no such symbol in context»
— «incomplete type»

смотри здесь GDB Debugger Tips

Как я могу проводить отладку компонентов и пакетов FCL с помощью Lazarus

Компоненты и классы FCL скомпилированны по умолчанию без отладночной информации. Как результат — gdb не моэет получить доступ к методам и свойствам этих объектов. Для пересборки компонентов FCL необходимо включить ключ компилятора «-gl» для генерации отладочной информации.

Этот пример предпологает, что у вас Linux дистрибутив с установленным FPC в папке /usr/local/ и вам необходимо включить отладочную информацию для пакета fcl-db. По аналогии с пакетом fcl-db, используемом в данном примере, вы можете применить эти команды для ЛЮБЫХ пакетов, содержащихся в дистрибутиве.

В начале, вам необходимо найти путь к установленному FPC проверив ваш конфигурационный файл FPC. Это файл (fpc.cfg) расположен /etc/fpc.cfg. Просмотрите содержимое fpc.cfg определить папку установки. Обратите внимание на строки, начинающиеся с -Fu в fpc.cfg:

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

При создании скрипта для установки модулей в папку INSTALL_PATH/lib/fpc/$fpcversion/units/$fpctarget/, вы должны быть уверены, что /usr/local это путь установки FPC, и он должен быть присвоем INSTALL_PREFIX, в противном случае Make-скрипт установи модули в неправильную папку или вообще завершится с ошибкой.

Step 1: Открыть терминал и набрать терминале
Step 2: cd /user/local/share/src/fpc-2.3.1/fpc/fcl-db/
Step 3: sudo make clean all install INSTALL_PREFIX=/usr/local OPT=-gl

Замечание: Параметр INSTALL_PREFIX правильно указан для установки модулей.
В примере ниже /usr/local — это путь по умолчанию для fpc в Linux, но он может сильно отличаться в других операционных системах

make clean all install INSTALL_PREFIX=/usr/local OPT=-gl

В конце, после пересборки любого FCL пакета, вам возможно необходимо будет пересобрать LCL.

Contributing / Making Changes to Lazarus

Я создал патч для пристыковки окна сообщений IDE к окну «Редактор исходного кода» (снизу)

Такие патчи не будут приняты, так как они реализуют лишь малую часть требуемой функциональности стыковки (docking). Цель состоит в создании полноценного менеджера стыковки и его использовании. Полноценный менеджер стыковки(dock manager) может соединять все окна и позволяет пользователю определять, как их стыковать (должно ли окно сообщений быть над или под окном кода … или вообще быть отделено от него).
К примеру:

+-------------------++--+
|menu               ||  |
+-------------------+|  |
+--++---------------+|  |
|PI|| Source Editor ||CE|
+--+|               ||  |
+--+|               ||  |
|  |+---------------++--+
|OI|+-------------------+
|  ||messages           |
+--++-------------------+

Менеджер стыковки может сохранить это расположение и восстановить его при следующем старте. Предпочтительно, если менеджер может работать не только с окнами, но и со страницами редактора кода. Менеджер стыковки не требует использования drag&drop.
Все патчи реализующие стыковку без менеджера стыковки усложняют реализацию настоящего менеджера стыковки и потому будут отклонены.

В качестве временного решения можно использовать это расширение IDE: Manual Docker

Я исправил/улучшил Lazarus. Как добавить мои изменения в официальный код Lazarus?

Создайте патч и пришлите его разработчикам. Более подробную информацию смотрите здесь Creating A Patch/ru.

How can I become a Lazarus developer and access management in the SVN and bug-tracker?

First of all: you must learn about Lazarus, to prove your knowledge and skill.
Start by reading the wiki articles, read the Lazarus source code, giving a look at the Lazarus Bug-Tracker, fix some bugs, and if you think you are ready, contact the developers on the mailing list.

Где объявлены …

Константы виртуальных клавиш

Константы виртуальных клавиш (VK_UP, VK_ESCAPE и т.д ) объявлены в LCLType. Добавьте LCLtype в uses секцию.

Использование среды разработки

Как я могу использовать «завершение идентификаторов»?

Чтобы вызвать окно завершения идентификатора нажмите [ctrl][space] (по умолчанию для Windows и Linux).

Вы можете настроить автоматическое появление этого окошка в пункте меню Окружение->Редактор->Code Tools->Автоматические функции

Linux

Как выполнить отладку в Linux без IDE?

Прежде всего потребуется отладчик. gdb это стандартный отладчик под линукс, имеющий
несколько GUI-интерфейсов. Наиболее распространённый интерфейс — ddd — является частью большинства
популярных дистрибутивов. Для компиляции lazarus/lcl с информацией для отладчика вам нужно
использовать следующие команды для запуска отладочной сессии:

 $ make clean; make OPT=-dDEBUG
 $ ddd lazarus

Однако, следует отметить что ddd не такой удобный как например отладчик Lazarus.
Особенно если он используется для просмотра значений имеющихся переменных, учитывая что
ddd/gdb регистрозависимы, а Pascal — регистронезависим. Поэтому, чтобы видеть значения переменных,
необходимо набирать их имена в верхнем регистре. Для получения более подробной информации
обратитесь к fpc-manuals.

I can debug now but ddd does not find my sources or complains that they contain no code. Whats that?

This is a path-related problem with either gdb or ddd. You can avoid this by

  • Use the «Change directory» command from the ddd menu and choose the directory where the sources are located. The drawback of this method is that you now can’t use the source of the program you started with (e.g. lazarus). Thus it may be neccessary to change the directory multiple times.
  • In ddd goto [Edit] [gdb-settings] and set the search-path
  • Create a $(HOME)/.gdbinit file like:
     directory /your/path/to/lazarus
     directory /your/path/to/lazarus/lcl
     directory /your/path/to/lazarus/lcl/include

I receive an error during the linking that states /usr/bin/ld can’t find -l<some lib>

Package Based Distributions
You need to install the package that provides the lib<somelib>.so or lib<somelib>.a files. Dynamic libs under linux have the extension .so, while static libs have the extension .a. On some Linux distro’s you have installed the package (rpm, deb) <packagename> which provides <some lib>, but you also need the development package (rpm, deb), normally called <packagename>-dev, which contains the .a (static lib) and/or the .so (dynamic lib).
Some distributions have commands to find which package contains a file:
Mandriva
[]$ urpmf lib<somelib>.so
will list all packages containing the file named lib<somelib>.so, you’ll have to install those ending in -devel
Debian
install the apt-file utility (apt-get install apt-file) then
[]$ apt-file search lib<somelib>.so
will list all packages containing the file named lib<somelib>.so, you’ll have to install those ending in -dev
Source Based Distributions and Manual Compilation (LFS)
Make sure that there is a lib<somelib>.a in the path, and that it contains the right version. To let the linker find the dynamic library, create a symlink called lib<some lib>.so to lib<some lib><version>-x,y.so if necessary (and/or for static lib; lib<some lib>.a to lib<some lib><version>-x,y.a).
FreeBSD
As source based distro’s, and also make sure you have -Fl/usr/local/lib in your fpc.cfg and/or Lazarus library path. Keep in mind that GTK1.2 has «gtk12» as package name under FreeBSD. (same for glib) NOTE: This has changed as of late. Newest ports have gtk-12 and glib-12 as well. You might stumble on this problem, since FPC requires the «-less» ones, you will need to symlink them like this:
[]# cd /usr/local/lib && ln -s libglib-12.so libglib12.so
[]# cd /usr/X11R6/lib && ln -s libgtk-12.so libgtk12.so
[]# cd /usr/X11R6/lib && ln -s libgdk-12.so libgdk12.so
NetBSD
As source based distro’s, and also make sure you have -Fl/usr/pkg/lib in your fpc.cfg and/or Lazarus library path

How can I convert a kylix 2 project into a lazarus project?

Nearly the same way as converting a Kylix project into a Delphi/VCL project.

The LCL (Lazarus Component Library) tries to be compatible to Delphi’s VCL.
Kylix’s CLX tries to be QT compatible.
Here are some general hints:

  • Rename all used CLX Q-units like QForms, QControls, QGraphics, … into their VCL counterparts: Forms, Controls, Graphics, …
  • Add LResources to the uses section of every form source
  • Rename or copy all .xfm files to .lfm files.
  • Rename or copy .dpr file to .lpr file.
  • Add «Interfaces» to the uses section in the .lpr file.
  • Remove {$R *.res} directive
  • Remove {$R *.xfm} directive
  • Add {$mode objfpc}{$H+} or {$mode delphi}{$H+} directive to .pas and .lpr files
  • Add an initialization section to the end of each form source and add an include directive for the .lrs file (lazarus resource file):
 initialization
   {$I unit1.lrs}
The .lrs files can be created via the lazres tool in: (lazarusdir)/tools/lazres.
For example: ./lazres unit1.lrs unit1.lfm
  • Fix the differences. The LCL does not yet support every property of the VCL and the CLX is not fully VCL compatible.
  • To make it more platform independant, reduce unit libc (which is deprecated) references and substitute with native FPC units like baseunix/unix as much as possible. This will be necessary to support other targets than linux/x86 (including OS X, FreeBSD and Linux/x86_64)

When compiling lazarus the compiler can not find a unit. e.g.: gtkint.pp(17,16) Fatal: Can’t find unit GLIB

1. Check a clean rebuild: do a ‘make clean all’

2. Check if the compiler has the correct version (2.0.4 or higher)

3. Check if the compiler is using the right config file. The normal installation creates /etc/fpc.cfg. But fpc also searches for ~/.ppc386.cfg, ~/.fpc.cfg, /etc/ppc386.cfg and it uses only the first it finds.

Hint: You can see which config file is used with ‘ppc386 -vt bogus’
Remove any ppc386.cfg as it is really obsolete.

4. Check if the config file (/etc/fpc.cfg) contains the right paths to your fpc libs. There must be three lines like this:

   -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
   -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl
   -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
The first part of these paths (/usr/lib/fpc) depends on your system. On some systems this can be for example /usr/local/lib/fpc/… .
Hint: You can see your searchpaths with ‘ppc386 -vt bogus’

5. Check that the config file (/etc/fpc.cfg) does not contain search paths to the lcl source files (.pp, .pas):

 forbidden: -Fu(lazarus_source_directory)/lcl
 forbidden: -Fu(lazarus_source_directory)/lcl/interfaces/gtk
If you want to add the lcl for all your fpc projects, make sure that the two paths look like the following and are placed after the above fpc lib paths:
 -Fu(lazarus_source_directory)/lcl/units/$fpctarget
 -Fu(lazarus_source_directory)/lcl/units/$fpctarget/gtk

6. Check if the missing unit (glib.ppu) exists in your fpc lib directory. For example the gtk.ppu can be found in /usr/lib/fpc/$fpcversion/units/i386-linux/gtk/. If it does not exists, the fpc lib is corrupt and should be reinstalled.

7. Check if the sources are in a NFS mounted directory. In some cases the NFS updates created files incorrectly. Please, try to move the sources into a non NFS directory and compile there.

8. If you are still not succeeded try to use samplecfg script as follows:

# cd /usr/lib/fpc/version/

# sudo ./samplecfg /usr/lib/fpc/$version /etc

Note! Do not put — / — after etc because if you do that the system will create a file — /etc/fpc.cfg/fpc.cfg. In fact we want that samplecfg make a file — /etc/fpc.cfg — not the folder /etc/fpc.cfg.

I have installed the binary version, but when compiling a simple project, lazarus gives: Fatal: Can’t find unit CONTROLS

Probably you are using a newer fpc package, than that used for building the
lazarus binaries. The best solution is to download the sources and compile
lazarus manually. You can download the source snapshot or get the source
via svn:

 $ bash
 $ svn checkout http://svn.freepascal.org/svn/lazarus/trunk lazarus
 $ cd lazarus
 $ make clean all

Make sure that lazarus get the new source directory:
Environment->General Options->Files->Lazarus Directory Top

Lazarus компилируется, но компоновка прерывается с ошибкой: libgdk-pixbuf not found

Для решения проблемы нужно установить библиотеку gdk-pixbuf library для gtk1.x:

Библиотека gdk-pixbuf может быть найдена:

RPM пакет:
http://rpmfind.net/linux/rpm2html/search.php?query=gdk-pixbuf&submit=Search+…&system=&arch=

Debian пакет:
libgdk-pixbuf-dev

Исходники:
ftp://ftp.gnome.org/pub/gnome/unstable/sources/gdk-pixbuf/

Ubuntu 8.10:

Если вы собираете Lazarus с GTK 2.0 вы можете получить ошибку «libgdk-pixbuf2.0 not found» . Для решения проблемы просто установите пакет libgtk2.0-dev, используя команду apt следующим образом (используйте sudo при необходимости):

apt-get install libgtk2.0-dev

Я использую SuSE, при компиляции получаю ошибку: «/usr/bin/ld: cannot find -lgtk Error: Error while linking»

Ранние версии SuSE (до SuSE 11) устанавливали gtk библиотеки devel в директорию /opt/gnome/lib (или /opt/gnome/lib64 для 64-й версии), что не является общепринятым путём для библиотек.

Для решения проблемы, вы можете добавить этот путь библиотеки в конфигурационный файл FPC (/etc/fpc.cfg), следующей строкой:

-Fl/opt/gnome/lib.

Лазарус после установки компонента падает с ошибкой runtime error 211

После установки компонента Лазарус падает со следующей ошибкой:

Threading has been used before cthreads was initialized.
Make cthreads one of the first units in your uses clause.
Runtime error 211 at $0066E188

Как это исправить?

Установленный компонент использует потоки. FPC не включает поддержку многопоточности автоматически на *nix системах, по-этому её необходимо включать вручную. Её включение происходит использованием модуля cthreads. Любое приложение, использующее такой компонент должна использовать этот модуль, причём он должен быть первым подключаемым модулем в программе. Лазарус так же не является исключением.

Подключить модуль cthreads можно двумя способами:

1) Откройте пакет. В редакторе пакетов нажмите на Параметры (Options). Во вкладке Использование (Usage) добавьте настройкуПользовательские (custom) и запишите -dUseCThreads. Пересоберите Лазарус. В этом случае модуль cthreads подключиться автоматически для unix систем.

2) Чтобы не изменять пакет, можно добавить директиву компиляци при сборке самого Лазаруса. Откройте меню Сервис(Tools)->Параметры сборки Lazarus(Configure «build Lazarus)». В диалоге Параметры «Cборки Lazarus»(«build Lazarus») в поле «Параметры:»(«Options:») впишите -Facthreads и нажмите кнопку «OK». После этого добавьте пакет и пересоберите среду.

Совет: Предыдущая копия Лазаруса (исполнительный файл, который при запуске на выдавал ошибку), скорее всего, находится в той же папке что и текущая версия, но с расширением .old.

См.также:Модули, необходимые для мультипоточных приложений

Когда я запускаю программу, использующую потоки (threads), я получаю сообщение об ошибке «runtime error 232»

Полное сообщение выглядит так:

This binary has no thread support compiled in.
Recompile the application with a thread-driver in the program uses
clause before other units using thread.
Runtime error 232

Решение: Добавьте модуль cthreads в секцию uses главного модуля вашей программы (обычно это .lpr-файл).

У меня Ubuntu Breezy/Mandriva KDE3 и шрифты в Lazarus IDE выглядят слишком большими

Попробуйте следующее:
Создайте файл с именем «.gtkrc.mine» в домашней директории (если он не существует) и внесите в него данный текст:

style "default-text" {
       fontset = "-*-arial-medium-r-normal--*-100-*-*-*-*-iso8859-1,
                  -*-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
}

class "GtkWidget" style "default-text"

Если это не сработает, попробуйте создать ссылку .gtkrc на .gtkrc.mine. Данный способ был опробован в Xubuntu 7.10 и Mandriva 2009.0 KDE3

Примечание: Если Lazarus был скомпилирован с использованием библиотеки Gtk1.2, то настройка шрифтов в Gtk2 не будет влиять на отображение текста в нём.

Как подключать и использовать сторонние файлы ресурсов (*.rc) в GTK приложении?

Вариант 1.
Переименуйте файл ресурсов (rc) мой_ресурс.rc в имя_программы.gtkrc и поместите в папку с исполняемым файлом программы.

Вариант 2.
Подключите модуль GtkInt в секцию uses исходного кода проекта (*.lpr), и допишите код

{$IFDEF LCLGtk} 
  GTKWidgetSet.SetRCFilename('имя_вашего_файла_ресурса');
{$ENDIF LCLGtk}

перед вызовом Application.Initialize.

Вариант 3. Используя модуль gtk2 вызовите метод gtk_rc_parse(‘имя_файла_ресурса’) а также gtk_rc_reparse_all.

I have Ubuntu and I cannot compile for Gtk2 due to missing libraries

Ubuntu has a problem with not creating all the symbolic links that you’ll need even when the libraries are installed. Make sure that all missing libraries when trying to link for Gtk2 have their appropriate links. For instance, you might need to do:

cd /usr/lib
sudo ln -s libgdk-x11-2.0.so.0 libgtk-x11-2.0.so

Make sure that the [whatever].so symbolic links are created and point to the actual libraries.

How can I compile a program for Gtk2?

At the moment, the Gtk2 compiled IDE is a little unstable, but you can compile software for Gtk2 using the Gtk1 IDE.

To start with recompile LCL for Gtk2. Go to the menu «Tools»->»Configure Build Lazarus» and set LCL to clean+build and everything else to none.

Now click Ok and go to the menu «Tools»->»Build Lazarus»

Now you can compile your software with Gtk2 going on the Compiler options and changing the widgetset to Gtk2.

I get this message: «[WARNING] ** Multibyte character encodings (like UTF8) are not supported at the moment.»

Since revision 10535 (0.9.21) this message doesn’t exist anymore.
Previously it was used to warn that a UTF-8 encoding was used. The internal keyhandling routines for the gtk1 widgetset couldn’t handle such encoding for keypresses, with the result that keypresses with for instance accented chars were not or wrong detected.

(original text for older versions of lazarus)

This warning message indicates that your locale enconding is set to utf-8. If you are using Gtk 1 this can be a serious problem and prevent the correct working of Lazarus or software created with Lazarus.

To work around this, just change your locale to a non utf-8 before executing the program on the command line, like this:

export LC_CTYPE="pt_BR"
export LANG="pt_BR"
export LANGUAGE="pt_BR"
./lazarus

Substitute pt_BR with the locale for your country. You can create a script to automate this.

Windows

When I cycle the compiler, I get:The name specified is not recognized as an internal or external command, operable program or batch file.>& was unexpected at this time.

In the compiler directory there is an OS2 scriptfile named make.cmd. Different versions of Windows also see this as a script file, so remove it since what is needed for OS2 becomes a hindrance on Windows.

When I cycle the compiler, I get: make[3]: ./ppc1.exe: Command not found

I don’t know why but somehow make has lost its path. Try to cycle with a
basedir set like: make cycle BASEDIR=your_fpc_source_dir_herecompiler

When I try to make Lazarus I get:

make.exe: * * * interfaces: No such file or directory (ENOENT). Stop.make.exe: * * * [interfaces_all] Error 2

You need to upgrade your make.

makefile:27: *** You need the GNU utils package to use this Makefile. Stop.

Make sure you didn’t install FPC in a path with spaces in the name. The
Makefile doesn’t support it.

How can I give my program an XP look like lazarus has?

Project -> Project Options -> Check ‘Use manifest to enables themes’.

Когда я запускаю Windows программу, созданную в Lazarus-е, открывается консольное (DOS) окно

Укажите параметр -WG (Windows графическое приложение) в командной строке компилятора или установите флажок

Проект->Опции проекта->Параметры компилятора -> Связывание -> Графическое приложение Win32 

англ:

Project->Project Options-> Compiler Options -> Linking -> Win32 GUI application.

Mac OS X

Why does compiling a project fail with ‘unknown section attribute: no_dead_strip’?

Dead code stripping is not supported by the assembler and linker before Xcode 1.5 (available for Mac OS X 10.3.9). Disable the compiler options

  • Code > Unit style > Smart linkable (-CX)
  • and Linking > Link Style > Link smart (-XX)

Лицензирование

Могу ли я создавать коммерческие приложения, используя Lazarus?

Да, библиотека LCL разрабатывается под лицензией LGPL, что позволяет использовать её без открытия кода вашего приложения. Однако, модификации и расширения LCL должны распространяться с исходным кодом. Сам Lazarus, как IDE, использует лицензию GPL.
Отметим, что LCL — это код, содержащийся в файлах из каталога «lcl», прочий код не подпадает под действие указанной лицензии.

Могу ли использовать в коммерческих приложениях дополнительные компоненты Lazarus?

В составе Lazarus есть дополнительные компоненты, разработанные участниками сообщества. Некоторые из этих компонентов распространяются под лицензиями, отличными от лицензии самого Lazarus. Если вы используете такие компоненты, вы должны уточнить их лицензию. Обычно необходимое пояснение приводится в исходном коде файлов соответствующего пакета.
Большинство дополнительных компонентов от сторонних разработчиков можно найти в подкаталоге «components» основного каталога Lazarus.

Как я могу узнать, что компонент является частью LCL?

Все модули LCL размещаются в подкаталоге «lcl». Также доступен список модулей, входящих в LCL. Если в вашем коде вызываются модули, которых нет в этом списке, вероятно, вы используете компонент, не являющийся частью LCL.

Могу ли я создавать коммерческие плагины для Lazarus?

Да, the IDEIntf part of the IDE is licensed under the LGPL with the same exception, so that shared data structures in this part will not force you to license your plug-in or design-time package under the GPL. You are free to choose a plug-in of any license; we don’t want to limit your choice. Therefore non-GPL compatible plug-ins are allowed. Note that it’s not allowed to distribute a precompiled Lazarus with these non-GPL-compatible plugins included statically; however, we do not see this as a severe limitation, since recompiling Lazarus is easy.

Модератор: Модераторы

Ошибки после преобразования проекта из Delphi в Lazarus

Здравствуйте, модераторы!
Нашел на просторах рунета проектик по рисованию кривых Безье. Решил преобразовать его из Delphi-формы в Lazarus-форму. Преобразовал средствами Lazarus’а, но при компиляции выпали следующие ошибки!

Код: Выделить всё
Hint: Start of reading config file C:lazarusfpc2.6.4bini386-win32fpc.cfg
Hint: End of reading config file C:lazarusfpc2.6.4bini386-win32fpc.cfg
Free Pascal Compiler version 2.6.4 [2014/06/14] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling Canvas2.lpr
Compiling C2Unit.pas
C2Unit.pas(20,26) Hint: Parameter "Sender" not used
C2Unit.pas(21,29) Hint: Parameter "Sender" not used
C2Unit.pas(21,64) Hint: Parameter "Shift" not used
C2Unit.pas(22,29) Hint: Parameter "Sender" not used
C2Unit.pas(23,27) Hint: Parameter "Sender" not used
C2Unit.pas(23,62) Hint: Parameter "Shift" not used
C2Unit.pas(23,80) Hint: Parameter "X" not used
C2Unit.pas(23,82) Hint: Parameter "Y" not used
C2Unit.pas(193,17) Error: Identifier not found "LineDDA"
C2Unit.pas(249,13) Error: Identifier not found "BeginPath"
C2Unit.pas(251,11) Error: Identifier not found "EndPath"
C2Unit.pas(252,15) Error: Identifier not found "FlattenPath"
C2Unit.pas(253,17) Error: Identifier not found "GetPath"
C2Unit.pas(256,11) Error: Identifier not found "GetPath"
C2Unit.pas(266,15) Error: Identifier not found "LineDDA"
C2Unit.pas(282) Fatal: There were 7 errors compiling module, stopping

Как посоветуете их исправить?

Добавлено спустя 11 минут 29 секунд:
Подключил в Uses Windows, те ошибки пропали!

Код: Выделить всё
uses
  LCLIntf, LCLType, LMessages, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Windows;

НО! Появились следующие:

Код: Выделить всё
Hint: Start of reading config file C:lazarusfpc2.6.4bini386-win32fpc.cfg
Hint: End of reading config file C:lazarusfpc2.6.4bini386-win32fpc.cfg
Free Pascal Compiler version 2.6.4 [2014/06/14] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling Canvas2.lpr
Compiling C2Unit.pas
C2Unit.pas(49,17) Error: identifier idents no member "Create"
C2Unit.pas(49,17) Fatal: Syntax error, ";" expected but "identifier CREATE" found
riv94
незнакомец
 
Сообщения: 2
Зарегистрирован: 03.11.2014 19:43:05

Re: Ошибки после преобразования проекта из Delphi в Lazarus

Сообщение ViruZ » 03.11.2014 22:43:41

Случайно не эта програма http://delphisources.at.ua/load/iskhodniki/grafika/bezier_curves/7-1-0-1163#?
Попробовал сконвертировать, ругнулось на строку:

Код: Выделить всё
Windows.polybezier(image1.canvas.handle, BB, NB2+1);

Заменил в разделе Uses

Код: Выделить всё
LCLIntf, LCLType, LMessages

на

Код: Выделить всё
Windows

Заработало.
Хотя, если нужна кросс-платформа, этот вариант не подходит. Функция polybezier находится в модуле LCLIntf, но мне было лень разбираться с параметрами (компилятор ругнулся на несоответствие параметров функции).
P.S. Lazarus 1.2.4 FPC 2.6.4 WinXP SP3

ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
  • Профиль
  • Сайт

Re: Ошибки после преобразования проекта из Delphi в Lazarus

Сообщение riv94 » 04.11.2014 01:44:11

Никак нет) Не этот исходник.. Поищу ссылочку, пришлю!

riv94
незнакомец
 
Сообщения: 2
Зарегистрирован: 03.11.2014 19:43:05


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Понравилась статья? Поделить с друзьями:
  • Error identifier not found lazarus
  • Error identifier not found form1
  • Error identifier expected java
  • Error id returned 1 exit status что это
  • Error id 255 ecu address 92h error 6eh ивеко стралис