ich habe immer wieder das Problem, daß oft bereits beim Kompilieren eines neuen Packages bzw dann beim Installieren desselben, wenn Lazarus ganz neu kompiliert werden muss, der Compiler dann immer wieder unterbricht: unit xxx nicht gefunden. Obwohl sie manchmal mit Ctrl+Click sogar angesprungen werden kann. Ich muss dann von Hand erst das entsprechende Verzeichnis in den Compilereinstellungen hinzufügen. Es ist fast immer nur dann der Fall, wenn derselbe Unitname viele Male vorkommt, jedesmal zugehörig zu einem anderen Widgetset bzw. OS.
Kann denn so etwas der Compiler nicht selber automatisch machen?
Aber jetzt das eigentliche Problem:
bei einem Package (MirrorKOL) wird auch die Unit graphics verlangt. Diese führt aber letztlich zur Unit Trees (graphics --> FPReadPNG, FPWritePNG --> zstream --> zdeflate --> trees), und da ist ein - für mich und anscheinend auch den Compiler - unlösbares Problem.
Es heißt da:
Code: Alles auswählen
type
ct_data_ptr = ^ct_data;
ct_data = record
fc : record
case byte of
0:(freq : word); { frequency count }
1:(code : word); { bit string }
end;
dl : record
case byte of
0:(dad : word); { father node in Huffman tree }
1:(len : word); { length of bit string }
end;
end;
tree_ptr = ^ct_data;
procedure gen_codes(tree : tree_ptr; { the tree to decorate }
max_code : integer; { largest code with non zero frequency }
var bl_count : array of word); { number of codes at each bit length }
var
next_code : array[0..MAX_BITS+1-1] of word; { next code value for each bit length }
code : word; { running code value }
bits : integer; { bit index }
n : integer; { code index }
len : integer;
begin
....
for n := 0 to max_code do
begin
len := tree[n].dl.Len; // <-- error: array erwartet
if (len = 0) then continue;
{ Now reverse the bits }
tree[n].fc.Code := bi_reverse(next_code[len], len);
inc(next_code[len]);
...
Was ich auch nicht verstehe: wieso wird das problemlos akzeptiert, wenn ich Lazarus einfach so kompiliere, aber nicht, wenn alles neu kompiliert werden soll? Ist das ein Bug - oder was?