Difference between revisions of "Lazarus Faq/hu"

From Free Pascal wiki
Jump to navigationJump to search
Line 548: Line 548:
 
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.
 
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.
 
-->
 
-->
===A bináris változatot telepítettem, de egy egyszerű projekt forításakor a Lazarus ezt írja:: 'Fatal: Can't find unit CONTROLS'===
+
===A bináris változatot telepítettem, de egy egyszerű projekt fordításakor a Lazarus ezt írja:: 'Fatal: Can't find unit CONTROLS'===
<!--
+
 
Probably you are using a newer fpc package, than that used for building the
+
Valószínűleg újabb FPC csomagot használsz annál mint amivel a Lazarus binárisok készültek. A legjobb megoldás a forráskódok letöltése és a Lazarus újrafordítása. Letöltheted a legfrissebb forráskódot (snapshot) vagy használhatod az svn rendszert:
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
 
   $ bash
Line 560: Line 557:
 
   $ make clean all
 
   $ make clean all
  
Make sure that lazarus get the new source directory:
+
Ellenőrizd hogy a Lazarus számára meg van-e adja a forráskódok új könyvtára, a menüből indulva:
Environment->General Options->Files->Lazarus Directory Top
+
"Environment->General Options->Files->Lazarus Directory Top"
-->
+
 
 
===A Lazarus lefordítható, de az összefűzés leáll ezzel: 'libgdk-pixbuf not found'===
 
===A Lazarus lefordítható, de az összefűzés leáll ezzel: 'libgdk-pixbuf not found'===
 
<!--
 
<!--

Revision as of 09:17, 17 September 2010

العربية (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)


Lazarus GY.I.K.

folyamatban...



Általános

Miért olyan nagyok a létrehozott binárisok?

A binárisok azért nagyok, mert hibakeresési információkat is tartalmaznak, amelyekre a gdb (GNU Debugger) használatakor van szükség.

A fordítónak van egy kapcsolója amellyel el lehet távolítani a hibakeresési információkat a futtatható állományból (-Xs), de egy hiba miatt (a 2.0.2 és korábbi változatokban) ez nem működik megfelelően. A hiba már javítva van a fordító 2.0.4 és későbbi változataiban.

Használhatod a 'strip' nevű programot a hibakeresési szimbólumok eltávolításához a futtatható állományból. Ez a lazarus könyvtárában található (például: lazarus\fpc\bin\i386-win32\).

Csak írd a parancssorba: "strip --strip-all <a_futtatható_fájl_neve_útvonallal>".

Ha még kisebbre akarod a programod méretét, kipróbálhatod az UPX programot. Az UPX egy nagyon jó tömörítő kifejezetten futtatható állományok tömörítéséhez. It includes no memory overhead due to in-place decompression. Nagyon gyorsan tömöríti ki az állományokat (~10 MB/másodperc egy Pentium 133 gépen).

Az UPX hazsnálatához írd a parancssorba: "upx <a_futtatható_fájl_neve_útvonallal>".

Miután mindkét parancs (strip és upx) is lefutott, egy Lazarus-szal készített egyszerű GUI alkalmazás mérete kb. ennyi lesz:

  • ~ 700kb Linux-on
  • ~ 420kb Windows-on

Részletesebb választ az UPX használatának esetleges hátrányairól is, itt olvashatsz: Size Matters (angolul).

Fontos megjegyezni, hogy a lazarus 'hello world' példaprogram már eleve tartalmaz nagyon sok fontos összetevőt. Tartalmazza:

  • XML kezelő függvénytár
  • Képkezelő függvénytár png, xpm, bmp és ico fájlokhoz
  • Majdnem minden widget-et a LCL-ből (Lazarus Component Library)
  • Az teljes Free Pascal Runtime Library-t

Ezért nagyon nagy, de már majdnem mindent tartalmaz amire egy a valódi világnak készülő és komoly alkalmazásnak szüksége lehet.

A Lazarus által készített futtatható állományok nagy mérettel kezdődnek, de csak lassan nőnek, köszönhetően a Free Pascal fordítónak és a módnak ahogy a lazarus ablakok működik. Egy c++ projekt (csak példa, de más nyelvekre / eszközökre is igaz) kis mérettel kezdődneka 'hello world' esetében, de méretük gyorsan a sokszorosára nő amikor egy szükséged van összetevőkre egy komoly alkalmazás írásához.

Lazarus vs cpp hu.png


Gyors útmutató a Lazarus/FPC alkalmazások méretének csökkentéséhez (tesztelve a Lazarus 0.9.26 változatával)

  • 1. "Project|Project Options|Compiler Options|Code|Smart Linkable (-CX)" -> Bejelölve
  • 2. "Project|Project Options|Compiler Options|Linking|Debugging|" minden törölve kivéve a "Strip Symbols From Executable (-Xs)" -> Bejelölve
  • 3. "Project|Project Options|Compiler Options|Linking|Link Style|Link Smart (-XX)" -> Bejelölve

A legfontosabb elem a 2. Egy egyszerű alkalmazás esetén a futtatható állomány mérete 1-3 MB körül lesz 15-20 MB helyett. Ezen a ponton megpróbálhatod ezt: "Project|Project Options|Compiler Options|Code|Optimizations|smaller rather than faster" -> Bejelölve (Figyelem: ez csökkentheti a tejesítményt)

  • 4. (Esetleg) Futtasd az "UPX <te_futtatható_programod>" parancsot a bináris állomány tömörítéséhez a -2 vagy -3 paraméterrel (Figyelem: mint fentebb olvashattad, az UPX használatának lehetnek hátrányai).

Méretek változása egy üres alkalmazás esetén, beállítások és operációs rendszerek függvényében

A tesztekhez változatok: Lazarus 0.9.29 és FPC 2.4 (Windows-on FPC 2.2.4). Az Optimized compiler a fentebbi tanácsok alkalmazását jelenti UPX használata nélkül. A Default Lazarus pedig azt ahogy telepítve lett a csomagból/telepítővel. Az LCL without debug informations jelentése, hogy a Lazarus IDE és LCL hibakeresési információk nélküli (-g-) újraépítése után.

    Default Lazarus     LCL without debug informations
Ubuntu 64 bits / Lazarus 64 bits
Default application     13,4  Mb     7,5 Mb / 8
Optimized compiler     4,4 Mb     2,70 Mb (0.29svn FPC2.4 2,5)
   
Ubuntu 32 bits / Lazarus 32 bits
Default application     19,6  Mb     5,7 Mb
Optimized compiler     2,9 Mb     1,6 Mb
   
Windows XP 32 bits / Lazarus 32 bits
Default application     11,8 Mb     2,14 Mb
Optimized compiler     1,62 Mb     1,50 Mb
   
Windows Seven 64 bits / Lazarus 64 bits
Default application     12,3  Mb     3,20 Mb
Optimized compiler     2,14 Mb     2,16 Mb

Miért lassú az alkalmazások építése Windows-on?

Ez a hiba javítva lett az FPC 2.2 és a Lazarus 0.9.24 változataiban. Frissítsd a Lazarus-t. Régebbi változatokkal kapcsolatban olvasd el a következő szöveget.

Általánosságban elmondható, hogy a fordítási idő Windows-on több időt vesz igénybe, mint más rendszereken, mert a GNU Linker, amit a Free Pascal használ lassú ezen a rendszeren. Ez a jelenség csak a Windows-on áll fenn, és csak a régebbi gép (1Ghz alatt) valamint kevés memória (128MB vagy kevesebb) esetén zavaró.

Ezen kívül, ha az LCL-t a "smartlink" kapcsolóval használod akkor az összefűzés sokkal lassabb lesz. Egy leírás erről itt található: File size and smartlinking (angolul - kidolgozás alatt)

Egy belső összefűző (linker) lett kifejlesztve, de csak a Free Pascal 2.2 változatától kezdve lesz elérhető (természetesen az SVN-ből is elérhető). Látványosan lecsökkenti az összefűzés idejét.

Megjegyzés: A 2.1.1 változat Windows-on egy olyan belső összefűzőt használ amely már egy kicsit gyorsabb. Az ezzel újrafordított Lazarus kb. 280MB-ot foglal el.

Melyikre van szükségem: ppc386.cfg vagy fpc.cfg?

Csak az fpc.cfg kell neked. Így a fordító tudja hogy hol vannak a függvénytárak.

Hogyan fordítsam a lazarus-t?

Valahogy így:

$ cd lazarus
$ make clean all

Hogyan fordíthatok más projekteket, amik az LCL-en az alapulnak?

Ha nem használhatod az IDE-t a fordításhoz, használd a 'lazbuild' programot. Ez egy parancssoros változata az IDE-nek, lazarus projektek és csomagok építéséhez. Ha az LCL alkalmazást az IDE és a lazbuild nélkül akarod elkészíteni, add következő sorokat az fpc.cfg fájlhoz:

  # searchpath for other toolkits (Linux)
  -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/{Készleted}
  # searchpath for other toolkits (Windows)
 -Fu/{LazarusKönyvtárad}/components/units/{Készleted}
Ahol {a Készleted} a következők lehetnek: gtk2, gnome, qt vagy win32. Ez után futtasd ezt a parancsot:
ppc386 projekted.pp

Megjegyzés: Ne felejtsd el telepíteni a fejlesztői csomagokat az adott készlethez, különben egy ehhez hasonló üzenetet kaphatsz: 'Linker message: cannot find -l'.

Melyik FPC változatra van szükség?

A Lazarus 0.9.28 legalább az FPC 2.4 változatát igényli.

Nem tudom fordítani a Lazarus-t

  1. Ellenőrizd, hogy a fordító megfelő változatát használod
  2. Ellenőrizd, hogy a függvénytárak (fpc) ugyanehhez a változathoz valók
  3. Ellenőrizd, hogy a fordító telepítési útvonalának nevében vannak-e szóközök. Ne legyenek!
  4. Ellenőrizd, hogy van-e fpc.cfg fájl és nincs régi ppc386.cfg
  5. Nézd át az operációs rendszerrel összefüggő GY.I.K.-t

Amikor egy projektet fordítok, hibaüzenetet kapok

"Cannot find Unit interfaces". Hogyan oldjam meg?

Ez azt jelenti hogy a fordító nem találja az 'interfaces.ppu' fájlt vagy azt jelenti, hogy talált, de hibás vagy érvénytelen (régi).

Ez a unit megtalálható a "{LazarusDir}\lcl\units\{TargetCPU}-{TargetOS}\{LCLWidgetSet}\interfaces.ppu" útvonalon. Például: "/home/username/lazarus/lcl/units/i386-linux/gtk/interfaces.ppu".

Ellenőrizd, hogy csak ott van. Ha több változatod is van interfaces.ppu fájlból, akkor valószínűleg rosszak a beállításaid (például hozzáadtál egy LCL könyvtárat a keresési útvonalhoz). Töröld az interfaces.ppu minden példányát, kivéve egyet a fenti könyvtárban.

Ha más ablakelem-készletet (widgetset) választottál mint amivel a Lazarus készült, le kell fordítanod az LCL-t is ehhez az ablakelem-készletet.

Ha ott van, de mégis ezt a hibaüzenetet kapod akkor eltérő fordítót/rtl-t használsz a projekted fordításához, mint amivel a Lazarus IDE készült. A következők egyikét teheted:

  • Építsd újra az LCL-t (vagy az egész Lazarus-t) az "Environmnent Options" között kiválasztott fordítóval. Ezt megteheted a "Tools|Build Lazarus" menüponttal. Előtte nézd át a vonatkozó beállításokat a "Tools|Configure Build Lazarus" menüpontra kattintva.
  • Változtasd meg a kiválasztott fordítót az "Environment Options" között arra amelyikkel a Lazarus-t fordítottad. Figyelmesen nézd meg az "Environment Options" között, hogy a megfelelő útvonal van-e beállítva a "Lazarus Directory" és az "FPC sources directory" mezőben. Ellenőrizd, hogy csak egy változata legyen a fordító beállításait tartalmazó fpc.cfg fájlnak - ennek helye a /etc/ könyvtár Linux/Unix rendszereken vagy Windows esetén az a könyvtár ahol az FPC fordító található. Próbáld futtatni az "fpc -vt bogus" parancsot hogy ellenőrizhesd melyik fpc.cfg van használatban a rendszereden. Felesleges példányok maradhatnak amikor újabb változattal frissíted a fordítót; ezek a felhasználói könyvtáradban vagy abban a könyvtárban lehetnek amelyben az új fordítót építetted. TÖRÖLD EZEKET!
  • Esetleg megváltoztathatod a projekt számára kiválasztott ablakelem-készletet. Egy példa: az "objectinspector" ami a Lazarus része alapértelmezés szerint gtk-ra van beállítva. Ennek fordítása biztosan előidézi a "Can't find unit interfaces" üzenetet Windows-on. Az ablakelemek átállítása "default(Win32)"-re megoldja a problémát: "Project|Project Options|Compiler Options...|LCL Widget Type (various)".

Amikor egy delphi projektet akarok fordítani Lazarus-szal, hibaüzenetet kapok

at the line :{$R *.DFM} Hogyan oldhatom meg ezt a problémát?

A Lazarus (vagy inkább a Linux) nem ismeri az adatforrásokat (resources), abban a formában ahogy a Delphi/Win32 használja. Ezért a Lazarus egy másik módot alkalmaz amely nagyjából egyenértékű vele. Használhatod a Delphi ablakelrendezéseket (.dfm fájlokat) a következő lépésekkel:

  • Szükséged van a .dfm fájlok szöveges változatára. A D5 és újabb változatok ilyet készítenek alapértelmezés szerint. Ha régebbi fájljaid vannak: Alt+F12 hogy szövegként lásd aztán másolás/beillesztés. Ha szöveges .dfm fájlod van, csak másold egy .lfm fájlba.
  • Készíts egy fájlt a lazres programmal (a lazarus/tools könyvtárban található): lazres formod.lrs formod.lfm
  • Add a következő sorokat a "initialization" részhez:
     initialization
     {$I formod.lrs}

Tartsd észben, hogy még nem minden tulajdonságot (property) támogat a Lazarus, amik a .dfm fájlokban előfordulhatnak, ezért esetleg összeomolhat.

Szerk: Az FPC 2.4.0 óta, a Delphi stílusú adatforrások is támogatottak, így már semmit sem kell megváltoztatnod. Megjegyzés: még mindig ajánlott a Lazarus Delphi project converter használata, mivel előfordulhatnak nem támogatott tulajdonságok.

'Identifier not found LazarusResources'.

Amikor a Lazarus létrehoz egy form-ot, hozzáad néhány unitot a unitod uses részéhez. Azonban Delphi unitok Lazarus unittá átalakításakor ez ez nem történik meg. Ezért neked kell hozzáadnod az LResources unitot a form unitjának uses részéhez.

Amikor egy objektum eseménykezelőjét hívom, pl. egy gomb az onclick()-jét akkor a következő hibaüzenetet kapom: 'ERROR unit not found: stdCtrls'

Ellenőrizd a "Project|Project Inspector"-ban, hogy a projekted az 'LCL' csomagokon alapul és hogy telepítetted az FPC forráskódjait.

A Lazarus a fejlesztőkörnyezet (IDE) és az LCL vizuális komponensek együttese. Minden egyéb, mint az IO, a Database, az FCL és az RTL az FPC által van biztosítva. Az IDE igényli az összes forráskód útvonalát.

Az FPC forráskódjainak útvonala beállítható a menüből indulva: "Environment|Environment Options|Files|FPC source directory"

Hogyan építhetek be egy kis fájlt a futtatható állományba, hogy ne legyen külön fájl? Hogyan építhetek be erőforrást?

Például:

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

Létrehozza a sound.lrs fájlt a sound1.wav és sound2.wav fájlokat felhasználva.

Ezután illeszd a kódodba a form .lrs *után*:

...
initialization
{$i unit1.lrs} // ez a fő erőforrás fájl (első)
{$i sound.lrs} // felhasználó által meghatározott erőforrás fájl

end.

A programodban így használhatod:

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

Mit jelentenek a különböző fájltípusok amiket a Lazarus használ?

A Lazarus Tutorial#The Lazarus files cikk részletesen, példákkal írja le a fájltipus kiterjesztéseket. Ez egy összefoglaló lista:

*.lpi
Lazarus Project Információ fájl (XML formátum; tartalmazza a projekt egyedi beállításait)
*.lpr
Lazarus Program fájl; a főprogram Pascal forráskódját tartalmazza
*.lfm
Lazarus Form fájl; információkat tartalmaz egy form összes eleméről (egyedi, a Lazarus által használt szöveges formátum; a műveletek Pascal forráskóddal megírva a megfelelő *.pas fájlban találhatók)
*.pas vagy *.pp
Pascal forráskódú Unit (tipikusan egy form-hoz tartozik amelynek adatai a megfelelő *.lfm fájlban találhatók)
*.lrs
Lazarus Resource fájl (erőforrás, ez egy generált fájl; nem szabad összetéveszteni a Windows erőforrás fájlokkal).
Ilyen fájlokat a lazres (a Lazarus/Tools könyvtárban található) eszközzel lehet létrehozni a parancssorból indítva: lazres fajlom.lrs fajlom.lfm
*.ppu
Lefordított unit
*.lpk
Lazarus csomag (package) információ fájl. (XML formátum; a csomag egyedi beállításait tartalmazza)

Amikor egy szövegfájlt deklarálok így: var mytext: text; , Hibaüzenetet kapok: "Unit1.pas(32,15) Error: Error in type definition". Hogyan javíthatom?

A TControl osztály (class) rendelkezik egy Text nevű tulajdonsággal (property). Egy form-hoz tartozó eljárásban (method) ennek elérhetősége elsőbbséget élvez a System unitban található Text típushoz képest. Használhatod a TextFile típust, ami egy álnév a Text típus számára, vagy a típus megadásakor a típusnév elé írhatod a unit nevét.

var
  MyTextFile: TextFile;
  MyText: System.Text;

Hasonló jelenség előfordulhat a szöveges fájl azonosítók kiosztásakor és a fájlok bezárásakor is. A TForm rendelkezik assign és Close eljárással (method) is. Használhatod az AssignFile és CloseFile eljárásokat vagy beszúrhatod a System unit nevét.

Hibaüzenetet kapok amikor a Printer.BeginDoc-ot használom

A Printers unitot hozzá kell adnod a uses részhez.

A Printer4Lazarus csomagot hozzá kell adnod a projekted függősdégeihez (requirement) az IDE menüjéből indulva: "Project|Project Inspector|Add|New Requirement|Package Name:"

Ha a Printer4Lazarus csomag nincs a legördülő listában amikor megnyitod akkor telepíteni kell. A csomag része a Lazarus telepítésnek és megtalálható ebben a könyvtárban: "[lazarus installed directory]\components\printers"

Ha az alapértelmezett telepítési könyvtárat használtad akkor a [lazarus installed directory] útvonala:

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

Ugyanez a megoldás alkalmazható ha a Printer.Printers-re hivatkozáskor kivétel (exception) keletkezik.

Miért egyenlő a TForm.ClientWidth/ClientHeight és a TForm.Width/Height

A TForm.Width/Height nem tartalmazza a keretet, mivel nem volt lehetséges lekérdezni a keret méretét minden rendszeren. Megbízható módszer nélkül az LCL rendellenesen mozgathatná vagy a végtelenségig átméretezhetné az ablakokat a képernyőn.

Azonban ha lesz megbízható eljárás egy ablak és kerete méretének, illetve helyzetének lekérdezésére minden rendszeren, akkor ez meg fog változni. A régebbi LCL form-okkal való kompatibilitás megtartása érdekében, az új változathoz néhány további eljárás (method) is hozzá lesz adva.

Hibakereső (Debugger)

Hogyan láthatom a hibakeresés kimenetét?

Az LCL tartalmaz két eljárást az LCLProc unitban a hibakereső kimenetre történő íráshoz. Ezek a következők:

  • DebugLn: úgy működik mint a WriteLn, de csak string paramétert fogad el.
  • DbgOut: úgy működik mint a Write, de csak string paramétert fogad el.

Normális körülmények között a kimenet az stdout-ra kerül. Ha az stdout zárt (például amikor az alkalmazás {$AppType Gui} vagy a -WG opciókkal lett lefordítva Windows-on), nem lesz írás a kimenetre.

A hibakeresés kimenete fájlba is írható. Az LCLProc unit az initialization részében ellenőrzi a Lazarus.exe parancssori paramétereit a '--debug-log=<file>' kapcsolót keresve. Ha megtalálja akkor a további hibakeresési kimenetek a <file>-ba lesznek írva.

Ha nincs megadva a '--debug-log' parancssori paraméter, akkor egy xxx_debuglog nevű környezeti változó létezését ellenőrzi az operációs rendszerben, melyben az xxx a programfájl neve kiterjesztés nélkül. A Lazarus számára ez lazarus_debuglog. Ha egy ilyen környezeti változó létezik, akkor az így megadott fájlt fogja használni a hibakeresési kimenetre írt adatok mentéséhez. Például: ha ezt teszed:

set lazarus_debuglog=c:\lazarus\debug.txt

a hibakeresési kimenet a c:\lazarus\debug.txt fájlba lesz írva.

Minden alkalmazás amely használja az lclproc unitot, használhatja ezt a lehetőséget.

Lazarus hibakeresés
A leghasználhatóbb módszer Windows-on a konzolt használata kimenetként, ehhez add az {$APPTYPE console} direktívát a lazarus.pp-hez, aztán építsd újra a Lazarus-t.

Hogyan figyelhetem a tulajdonságokat? (property)

A legutóbbi fejlesztői (2.5.1) vagy a 2.4-es változatot kell használnod.

Ha az alkalmazást a -gw (dwarf debug info) használatával fordítod, akkor figyelheted a tulajdonságokat.

Megjegyzendő hogy ez csak olyan a tulajdonságokra igaz amelyek közvetlenül változókat takarnak (a "read" deklaráció az osztály egy tagjára mutat és nem egy funkcióra).

Ha a tulajdonság egy művelet végeredményét adja vissza akkor nagyon veszélyes azok kiértékelése/figyelése. Szükséges lehet a művelet végrehajtása, és ez néha változók értékének megváltoztatását eredményezheti. Egyszerűbben fogalmazva megváltozhat az alkalmazásod állapota a hibakeresőben, és a további kódfuttatás, hibakeresés vagy figyelés érvénytelen eredményt adhat.

A lehetőség az eljárások visszatérési értékének figyelésére (a fentebbi kockázatok mellett), és e miatt kódok hívása a Debugger-ből még nincs kidolgozva.

Miért nem mutatja a hibakereső az egyes Változókat/Struktúrákat ("no such symbol"/"incomplete type")

A következő hibakeresési problémák esetén:
- tulajdonságok (property-k)
- array of ... (dinamikus tömbök)
- változók beágyazott eljárásokban
- "no such symbol in context"
- "incomplete type"
olvasd el ezt a cikket: GDB Debugger Tips (angol)

Hogyan használható a hibakereső, csomagokban található FCL komponenseken Lazarus-szal

Az FCL komponensek és osztályok alapértelmezetten hibakeresési információk nélkül lettek lefordítva és ezért a gdb nem tudja elérni az metódusokat és a tulajdonságokat. A komponensek csomagjait újra kell építeni a "-gl" kapcsolóval.

A következő példa feltételezi hogy egy Linux összeállítás használatát a /usr/local/ telepítési útvonallal és azt hogy az fcl-db adatbázis kezelő csomag az aminek tartalmaznia kell a hibakeresési információkat. A példában az fcl-db szerepel, de értelem szerűen bármely más csomaggal is működik.

Mielőtt elkezded, meg kell keresned az FPC beállításait tartalmazó fájlt: /etc/fpc.cfg. Nézd át a tartalmát és keresd meg az FPC telepítési útvonalát. Keress az fpc.cfg fájlban egy sort aminek az elején -Fu található:

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

A Make szkriptek által lefordított unitok az INSTALL_PATH/lib/fpc/$fpcversion/units/$fpctarget/ könyvtárba kerülnek, ezért biztosnak kell lenned abban hogy a telepítési útvonal a /usr/local, és ezt kell megadni INSTALL_PREFIX-ként, különben a Make által fordított unitok olyan helyre is kerülhetnek ahová nem tartoznak vagy a Make szkriptek hiba miatt le is állhatnak.

1. lépés: Nyisd meg a terminál ablakot
2. lépés: cd /user/local/share/src/fpc-2.3.1/fpc/fcl-db/
3. lépés: sudo make clean all install INSTALL_PREFIX=/usr/local OPT=-gl

Megjegyzés: az INSTALL_PREFIX paramétert megfelelően be kell állítani a unitok megfelelő elhelyezése érdekében!

A példában a /usr/local az alapértelmezett telepítési útvonal Linux-on, de más operációs rendszereken más lehet.

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

Végül bármelyik FCL unit újrafordítása után szükséges lehet az LCL újrafordítása is ugyanígy.

Közreműködés / Javítás a Lazarus-ban

Készítettem egy foltot (patch) amivel az IDE Üzenetek (Messages) ablaka a Forráskód-Szerkesztő (Source Code Editor) aljához rögzíthető

Ezeket a foltozásokat nem alkalmazzuk, mivel az ablakok kívánt összekapcsolási módjának csak egy kis része van kidolgozva bennük. A cél egy teljes rögzítéskezelő-rendszer elkészítése és használata. Egy teljes rögzítéskezelő-rendszer az IDE összes ablakát össze tudja kapcsolni a felhasználó által meghatározott módon. Például az üzenetek ablakát a forráskód-szerkesztő fölé vagy alá vagy... vagy semmit sehová. Minta:

+-------------------++--+
|menü               ||  |
+-------------------+|  |
+--++---------------+|  |
|PI|| Forráskód     ||CE|
+--+|    Szerkesztő ||  |
+--+|               ||  |
|  |+---------------++--+
|OI|+-------------------+
|  ||üzenetek           |
+--++-------------------+

A rögzítéskezelő tudja elmenteni az elrendezést és visszatölteni a következő betöltéskor. A rögzítéskezelőnek nem szükséges a fogd és vidd módszert használnia. Minden foltozgatás ami rögzítéskezelő nélkül kapcsolja össze az ablakokat, nehézzé teszi egy rögzítéskezelő kidolgozását és vissza lesz utasítva.

Ideiglenes megoldásként használhatod ezt a kiegészítést az IDE-hez: Manual Docker

Javítottam/fejlesztettem a Lazaruszon. Hogyan adhatom hozzá a változtatásokat a hivatalos Lazarus forráskódhoz?

Készíts egy foltot (patch) és küldd el a fejlesztőknek. Részletek itt találsz: Creating A Patch. (angolul)

Hogyan lehetek Lazarus fejlesztő, az SVN és a hibakövető (bug-tracker) kezelője?

Mindenek előtt: tanulj a Lazarus-ról, ezzel növelve a tudásod és a hozzáértésed. Kezdd a wiki cikkek olvasásával, olvasd át a Lazarus forráskódját, vess néhány pillantást a Lazarus Bug-Tracker, javíts ki néhány hibát, és ha úgy gondolod készen állsz, vedd fel a kapcsolatot a fejlesztőkkel a levelezőlistán.

Hol vannak a ... definiciók

Virtuális billentyű konstansok

A virtuális billentyű konstansok az LCLType unitban vannak definiálva. Add a uses részhez az LCLtype unitot.

Az IDE használata

Hogyan használhatom az "azonosító kiegészítés" ("identifier completion") lehetőséget?

Az azonosítók kiegészítése a ctrl+szóköz lenyomásával kérhető. Beállítható az automatikus kiegészítés késleltetése is, a menüből indulva: 'Environment|Editor Options|Code Tools|Automatic Features'.

Linux

A bináris változatot telepítettem, de egy egyszerű projekt fordításakor a Lazarus ezt írja:: 'Fatal: Can't find unit CONTROLS'

Valószínűleg újabb FPC csomagot használsz annál mint amivel a Lazarus binárisok készültek. A legjobb megoldás a forráskódok letöltése és a Lazarus újrafordítása. Letöltheted a legfrissebb forráskódot (snapshot) vagy használhatod az svn rendszert:

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

Ellenőrizd hogy a Lazarus számára meg van-e adja a forráskódok új könyvtára, a menüből indulva: "Environment->General Options->Files->Lazarus Directory Top"

A Lazarus lefordítható, de az összefűzés leáll ezzel: 'libgdk-pixbuf not found'

SuSE rendszeren ezt kapom: '/usr/bin/ld: cannot find -lgtk Error: Error while linking'

A Lazarus összeomlik 'runtime error 211' hibával, miután egy komponenst telepítettem

Amikor egy szálakkal (threads) dolgozó programot futtatok, hibaüzenetet kapok: 'runtime error 232'

Ubuntu Breezy/Mandriva KDE3 használatakor a betűk a Lazarus IDE-ben túl nagyok

Hogyan használhatnak a gtk programjaim különböző .rc fájlokat?

Ubuntu-t használok és nem tudok Gtk2-re fordítani, hiányzó függvénytárak miatt

Hogyan fordíthatok egy programot Gtk2-re?

Ezt az üzenetet kapom: "[WARNING] ** Multibyte character encodings (like UTF8) are not supported at the moment."

Windows

Amikor a 'cycle' fordítást használom, ezt kapom: 'The name specified is not recognized as an internal or external command, operable program or batch file.>& was unexpected at this time'.

A fordító könyvtárában van egy OS2 parancsfájl make.cmd névvel. Különböző Windows változatok is parancsfájlként ismerik fel ezt, törlöd, mert bár ez szükséges OS2-n, de gondot okoz Windows-on.

Amikor 'cycle' fordítást használom, ezt kapom: 'make[3]: ./ppc1.exe: Command not found'

Nem tudni miért, a make elfelejti az útvonalat. Próbáld meg a 'cycle' fordítást az alapkönyvtár beállításával futtatni, így: make cycle BASEDIR=your_fpc_source_dir_herecompiler

Amikor a Lazarus-t újra akarom fordítani (make parancsal), üzenetet kapok:

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

Frissítened kell a make fájlt.

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

Ellenőrizd, hogy az FPC-t nem egy olyan útvonalra telepítetted, aminek a nevében szóköz is van. A Makefile-ban nem támogatott.

Hogyan adhatok a programomnak XP kinézetet, mint amilyen a Lazarus-nak is van?

A menüből indulva: "Project|Project Options|Use manifest to enables themes" legyen bejelölve.

Amikor egy Lazarus-szal készített alkalmazást futtatok, az DOS ablakkal indul

Add meg a-WG paramétert (Windows GUI) a fordító parancssorában vagy jelöld be a 'Windows GUI' jelölőnégyzetet a Lazarus IDE fordítói beállításai között (A menüből indulva: "Project|Project Options|Compiler Options|Linking|target OS Specific options|Win32 GUI application").

Mac OS X

Miért áll le a fordítás 'unknown section attribute: no_dead_strip' üzenettel?

A 'halott' kódok kiszedését nem támogatja az assembler és az összefűző (linker) az Xcode 1.5 előtt (elérhető a Mac OS X 10.3.9 változatban). Kapcsold ki a következő fordítói beállításokat:

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

Engedélyek (Licencek)

Készíthetek kereskedelmi alkalmazásokat a Lazarus-szal?

Igen, az LCL az LGPL engedélyei szerint használható egy kivétellel, amely megengedi a statikus összefűzést (linkelést) az alkalmazásod forráskódjának közreadása nélkül. A változtatásokat és fejlesztéseket az LCL kódjában azonban annak forráskódjával együtt terjeszteni kell. A Lazarus IDE a GPL licenc hatálya alatt áll. Az LCL csak azokat a forráskódokat tartalmazza melyek az 'lcl' könyvtárban találhatók, egyéb kódokat nem szabad ide elhelyezni és ezzel álcázni.

Miért van egyes komponensek használata korlátozva kereskedelmi alkalmazásokban?

A Lazarus tartalmaz harmadik féltől származó komponenseket is. Ezek különböző engedélyek szerint használhatók. Ha használni szeretnéd őket, meg kell nézned az engedélyeket a csomagok forrásfájljaiban. A legtöbb harmadik féltől származó komponens a "components" könyvtárban található.

Honnan tudhatom meg, hogy egy komponens az LCL része-e?

Minden LCL unit az 'lcl' könyvtárban található. Az LCL részét képező unitok listája megtalálható a http://lazarus-ccr.sourceforge.net/docs/lcl/ címen. Ha kódodban egy itt fel nem sorolt unitot használsz, valószínűleg egy olyan komponenst használsz amely nem része az LCL-nek.

Készíthetek kereskedelmi bővítményt a Lazarus-hoz?

Igen, az IDEIntf nevű része az IDE-nek az LGPL engedélyei szerint használható az előbb említett kivétellel, így az abban megosztott adatstruktúrák nem köteleznek arra, hogy a bővítményedet vagy a tervező csomagodat a GPL hatálya alá helyezd. Szabadon választható bármilyen engedélyezésű bővítmény; nem akarjuk korlátozni a választást. Röviden: nem-GPL kompatibilis bővítmények használata is megengedett. Megjegyzendő, hogy nem megengedett egy már lefordított Lazarus terjesztése statikusan beépített, nem-GPL kompatibilis bővítményekkel; azonban szerintünk ez nem komoly korlátozás, mivel a Lazarus könnyen újrafordítható.

Közreműködők és megjegyzések

Ez az oldal az angol nyelvű oldal fordítása, mely az epikwiki változat alapján készült.