Difference between revisions of "Lazarus Faq/hu"
Line 1: | Line 1: | ||
− | { { Lazarus Faq } } | + | {{Lazarus Faq}} |
− | <font size="7"> Lazarus GY.I.K. < / font > | + | <font size="7">Lazarus GY.I.K.</font> |
− | + | folyamatban... | |
Line 10: | Line 10: | ||
− | == | + | == Á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 [http://upx.sourceforge.net/ 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 . | + | 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 on | + | * ~ 420kb Windows-on |
− | + | Részletesebb választ az UPX használatának esetleges hátrányairól is, itt olvashatsz: [[Size Matters]]<!--Méret Problémák--> ''(angolul)''. | |
− | + | Fontos megjegyezni, hogy a lazarus 'hello world' példaprogram már eleve tartalmaz nagyon sok fontos összetevőt. Tartalmazza: | |
− | * XML | + | * 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. | |
− | [[ Image : Lazarus_vs_cpp_hu.png ]] | + | [[Image: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) "-> | + | * 1. "Project|Project Options|Compiler Options|Code|Smart Linkable (-CX)" -> Bejelölve |
− | * 2 "Project | Project Options | Compiler Options | Linking | Debugging | " | + | * 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) "-> | + | * 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 ( | + | * 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. | |
− | < | + | <TABLE WIDTH=642 BORDER=0 CELLPADDING=1 CELLSPACING=0> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> < / TD > | + | <TD WIDTH=263></TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=111> Default Lazarus < / TD > | + | <TD WIDTH=111>Default Lazarus</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=220> LCL | + | <TD WIDTH=220>LCL without debug informations</TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> <U> Ubuntu 64 bits / Lazarus 64 bits < / U > < / TD > | + | <TD WIDTH=263><U>Ubuntu 64 bits / Lazarus 64 bits</U></TD> |
− | <TD COLSPAN=4 WIDTH=372> < / TD > | + | <TD COLSPAN=4 WIDTH=372></TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> Default < / TD > | + | <TD WIDTH=263>Default application</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=111> 13 | + | <TD WIDTH=111>13,4 Mb</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=220> 7,5 Mb / 8 < / TD > | + | <TD WIDTH=220>7,5 Mb / 8</TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> Optimized compiler < / TD > | + | <TD WIDTH=263>Optimized compiler</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=111> 4 | + | <TD WIDTH=111>4,4 Mb</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=220> 2 | + | <TD WIDTH=220>2,70 Mb (0.29svn FPC2.4 2,5)</TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> < / TD > | + | <TD WIDTH=263> </TD> |
− | <TD COLSPAN=4 WIDTH=372> < / TD > | + | <TD COLSPAN=4 WIDTH=372></TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> <U> Ubuntu 32 bits / Lazarus 32 bits < / U > < / TD > | + | <TD WIDTH=263><U>Ubuntu 32 bits / Lazarus 32 bits</U></TD> |
− | <TD COLSPAN=4 WIDTH=372> < / TD > | + | <TD COLSPAN=4 WIDTH=372></TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> Default < / TD > | + | <TD WIDTH=263>Default application</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=111> 19 | + | <TD WIDTH=111>19,6 Mb</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=220> 5 | + | <TD WIDTH=220>5,7 Mb</TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> Optimized compiler < / TD > | + | <TD WIDTH=263>Optimized compiler</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=111> 2 | + | <TD WIDTH=111>2,9 Mb</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=220> 1,6 Mb < / TD > | + | <TD WIDTH=220>1,6 Mb</TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> < / TD > | + | <TD WIDTH=263> </TD> |
− | <TD COLSPAN=4 WIDTH=372> < / TD > | + | <TD COLSPAN=4 WIDTH=372></TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> <U> Windows XP 32 bits / Lazarus 32 bits < / U > < / TD > | + | <TD WIDTH=263><U>Windows XP 32 bits / Lazarus 32 bits</U></TD> |
− | <TD COLSPAN=4 WIDTH=372> < / TD > | + | <TD COLSPAN=4 WIDTH=372></TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> Default < / TD > | + | <TD WIDTH=263>Default application</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=111> 11 | + | <TD WIDTH=111>11,8 Mb</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=220> 2 | + | <TD WIDTH=220>2,14 Mb</TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> Optimized compiler < / TD > | + | <TD WIDTH=263>Optimized compiler</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=111> 1 | + | <TD WIDTH=111>1,62 Mb</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=220> 1 | + | <TD WIDTH=220>1,50 Mb</TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> < / TD > | + | <TD WIDTH=263> </TD> |
− | <TD COLSPAN=4 WIDTH=372> < / TD > | + | <TD COLSPAN=4 WIDTH=372></TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> <U> Windows Seven 64 bits / Lazarus 64 bits < / U > < / TD > | + | <TD WIDTH=263><U>Windows Seven 64 bits / Lazarus 64 bits</U></TD> |
− | <TD COLSPAN=4 WIDTH=372> < / TD > | + | <TD COLSPAN=4 WIDTH=372></TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> Default < / TD > | + | <TD WIDTH=263>Default application</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=111> 12 | + | <TD WIDTH=111>12,3 Mb</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=220> 3 | + | <TD WIDTH=220>3,20 Mb</TD> |
− | < / TR > | + | </TR> |
− | <TR | + | <TR VALIGN=TOP> |
− | <TD WIDTH=263> Optimized compiler < / TD > | + | <TD WIDTH=263>Optimized compiler</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=111> 2 | + | <TD WIDTH=111>2,14 Mb</TD> |
− | <TD WIDTH=14> < / TD > | + | <TD WIDTH=14> </TD> |
− | <TD WIDTH=220> 2 | + | <TD WIDTH=220>2,16 Mb</TD> |
− | < / TR > | + | </TR> |
− | < / TABLE > | + | </TABLE> |
− | === | + | === 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 | + | ::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/hu|Linker message: cannot find -l]]'. |
− | === | + | === Melyik FPC változatra van szükség? === |
− | Lazarus 0.9.28 | + | A Lazarus 0.9.28 legalább az FPC 2.4 változatát igényli. |
− | === | + | === Nem tudom fordítani a Lazarus-t === |
− | # | + | # Ellenőrizd, hogy a fordító megfelő változatát használod |
− | # | + | # Ellenőrizd, hogy a függvénytárak (fpc) ugyanehhez a változathoz valók |
− | # | + | # Ellenőrizd, hogy a fordító telepítési útvonalának nevében vannak-e szóközök. Ne legyenek! |
− | # | + | # Ellenőrizd, hogy van-e fpc.cfg fájl és nincs régi ppc386.cfg |
− | # | + | # 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 } | + | ==== at the line :{$R *.DFM} Hogyan oldhatom meg ezt a problémát? ==== |
− | Lazarus ( | + | 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: {{keypress|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 | + | *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. <!--Even Lazarus svn already uses it as default projects. -->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 ' . ==== | + | ==== '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. | |
− | Lazarus | + | 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: | |
− | ; <code> *. lpi < / code >: Lazarus Project | + | ; <code>*.lpi</code> : Lazarus Project Információ fájl (XML formátum; tartalmazza a projekt egyedi beállításait) |
− | ; <code> *. lpr < / code >: Lazarus Program | + | ; <code>*.lpr</code> : Lazarus Program fájl; a főprogram Pascal forráskódját tartalmazza |
− | ; <code> *. | + | ; <code>*.lfm</code> : 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ő <code>*.pas</code> fájlban találhatók) |
− | ; <code> *. pas < / code > | + | ; <code>*.pas</code> vagy <code>*.pp</code> : Pascal forráskódú Unit (tipikusan egy form-hoz tartozik amelynek adatai a megfelelő <code>*.lfm</code> fájlban találhatók) |
− | ; <code> *. | + | ; <code>*.lrs</code> : 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 |
− | ; <code> *. | + | ; <code>*.ppu</code> : Lefordított unit |
− | ; <code> *. | + | ; <code>*.lpk</code> : 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 [[doc:lcl/controls/tcontrol.text.html|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ó [[doc:rtl/system/text.html|Text]] típushoz képest. Használhatod a [[doc:rtl/system/textfile.html|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 [[doc:lcl/forms/tcustomform.close.html|Close]] eljárással (method) is. Használhatod az [[doc:rtl/objpas/assignfile.html|AssignFile]] és [[doc:rtl/objpas/closefile.html|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 : | + | "Project|Project Inspector|Add|New Requirement|Package Name:" |
− | Printer4Lazarus | + | 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 | + | *Windows: c:\lazarus |
− | * Linux : / usr / lib / 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? === |
− | LCL | + | 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 : ''' | + | * '''DebugLn:''' úgy működik mint a WriteLn, de csak string paramétert fogad el. |
− | * ''' DbgOut : ''' | + | * '''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 | + | ;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:<br> | |
− | - | + | - tulajdonságok (property-k)<br> |
− | - array of ... ( | + | - array of ... (dinamikus tömbök)<br> |
− | - | + | - változók beágyazott eljárásokban<br> |
− | - " | + | - "no such symbol in context"<br> |
− | - " incomplete type " <br> | + | - "incomplete type"<br> |
− | + | 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 . | + | '''1. lépés''': Nyisd meg a terminál ablakot<br> |
− | '' '2 . | + | '''2. lépés''': cd /user/local/share/src/fpc-2.3.1/fpc/fcl-db/<br> |
− | '' '3 . | + | '''3. lépés''': sudo make clean all install INSTALL_PREFIX=/usr/local OPT=-gl<br> |
− | + | ||
− | + | 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: | |
<pre> | <pre> | ||
+-------------------++--+ | +-------------------++--+ | ||
− | | | + | |menü || | |
− | +-------------------+| | | + | +-------------------+| | |
− | +--++---------------+| | | + | +--++---------------+| | |
− | | PI | | | + | |PI|| Forráskód ||CE| |
− | +--+| | + | +--+| Szerkesztő || | |
− | +--+| | | | | + | +--+| || | |
− | | |+---------------++--+ | + | | |+---------------++--+ |
− | | OI |+-------------------+ | + | |OI|+-------------------+ |
− | | | | | + | | ||üzenetek | |
+--++-------------------+ | +--++-------------------+ | ||
− | < / pre > | + | </pre> |
− | + | A rögzítéskezelő tudja elmenteni az elrendezést és visszatölteni a következő betöltéskor. <!--Preferably the dock manager can dock in pages too. -->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 [[Lazarus_Documentation/hu|wiki cikkek]] olvasásával, olvasd át a Lazarus forráskódját, vess néhány pillantást a [http://www.lazarus.freepascal.org/mantis 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 [http://www.mail-archive.com/lazarus@miraclec.com levelezőlistán]. | |
− | == | + | == Hol vannak a ... definiciók == |
− | === | + | === Virtuális billentyű konstansok === |
− | + | A virtuális billentyű konstansok az [[doc:lcl/lcltype|LCLType]] unitban vannak definiálva. Add a <b>uses</b> 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 {{keypress|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 == | == Linux == | ||
− | === | + | === Hogyan használhatom a hibakeresőt az IDE nélkül? === |
− | <! - | + | <!-- |
− | First of all you need a debugger. gdb is the standard debugger under | + | First of all you need a debugger. gdb is the standard debugger under linux and |
− | there are | + | there are several GUI-frontends available. One common frontend is ddd, which is |
− | part of | + | part of most common distributions. To compile lazarus/lcl with debug-information |
− | you | + | you should then use the following commands to start a debug session: |
− | + | $ make clean; make OPT=-dDEBUG | |
− | + | $ ddd lazarus | |
− | + | Be warned however, that ddd is not as comfortable as e.g. the Lazarus debugger. | |
− | Specially if it comes to view the contents of | + | Specially if it comes to view the contents of a variable you have to take into |
− | account | + | account that ddd/gdb are case sensitive whereas Pascal is case-insensitive. |
− | Therefore you have to type all variable names in uppercase to see | + | Therefore you have to type all variable names in uppercase to see their |
− | contents . For more information take a look into the fpc - manuals . | + | contents. For more information take a look into the fpc-manuals. |
− | -> | + | --> |
− | === | + | === Tudom futtatni a hibakeresőt, de ddd nem találja a forráskódjaimat vagy panaszkodik, hogy nincs bennük kód. Mi ez? === |
− | <! - | + | <!-- |
− | This is | + | This is a path-related problem with either gdb or ddd. You can avoid this by |
− | * Use the "Change | + | * 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 | + | * In ddd goto [Edit] [gdb-settings] and set the search-path |
− | * Create | + | * Create a $(HOME)/.gdbinit file like: |
− | + | directory /your/path/to/lazarus | |
− | + | directory /your/path/to/lazarus/lcl | |
− | + | directory /your/path/to/lazarus/lcl/include | |
− | -> | + | --> |
− | === | + | === Hibaüzenetet kapok az összefűzés közben, ami azt mondja "/usr/bin/ld can't find -l<valami_lib>" === |
− | <! - | + | <!-- |
− | ; ''' Package Based Distributions ''' : You need to install the package | + | ; '''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 | + | : Some distributions have commands to find which package contains a file: |
− | : ''' Mandriva ''' | + | : '''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 ''' | + | : '''Debian''' |
− | : install the apt -file utility (apt - get install apt -file ) | + | :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 | + | ; '''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 | + | ; '''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 | + | ; '''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 |
− | -> | + | --> |
− | === | + | === Hogyan alakíthatok át kylix 2 projektet Lazarus projekté? === |
− | <! - | + | <!-- |
− | Nearly the | + | Nearly the same way as converting a Kylix project into a Delphi/VCL project. |
− | The LCL ( Lazarus Component Library) | + | The LCL (Lazarus Component Library) tries to be compatible to Delphi's VCL. |
− | Kylix 's CLX | + | Kylix's CLX tries to be QT compatible. |
− | Here are some general hints : | + | Here are some general hints: |
− | * Rename all used CLX Q - units like QForms , QControls , QGraphics ... into | + | * Rename all used CLX Q-units like QForms, QControls, QGraphics, ... into their VCL counterparts: Forms, Controls, Graphics, ... |
− | * Add LResources to the uses section of | + | * Add LResources to the uses section of every form source |
− | * Rename or copy all . | + | * Rename or copy all .xfm files to .lfm files. |
− | * Rename or copy . | + | * Rename or copy .dpr file to .lpr file. |
− | * Add " Interfaces "to the uses section in the . lpr file . | + | * Add "Interfaces" to the uses section in the .lpr file. |
− | * Remove { $ R *. res } directive | + | * Remove {$R *.res} directive |
− | * Remove { $ R *. | + | * Remove {$R *.xfm} directive |
− | * Add { $ mode objfpc } { $ H +} or { $ mode delphi } { $ H +} directive to. pas and. lpr files | + | * Add {$mode objfpc}{$H+} or {$mode delphi}{$H+} directive to .pas and .lpr files |
− | * Add an initialization section to the end of | + | * 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. | + | :The .lrs files can be created via the lazres tool in: (lazarusdir)/tools/lazres. |
− | : For example :. / lazres unit1.lrs unit1.lfm | + | :For example: ./lazres unit1.lrs unit1.lfm |
− | * Fix the | + | * 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 , | + | * 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) |
− | -> | + | --> |
− | === | + | === Amikor a Lazarus-t fordítom a fordító nem talál egy unitot. pl.: "gtkint.pp(17,16) Fatal: Can't find unit GLIB" === |
− | <! - | + | <!-- |
− | 1. Check | + | 1. Check a clean rebuild: do a 'make clean all' |
− | 2. Check if the compiler has the correct version ( 2.0.4 or higher ) | + | 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 | + | 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 | + | :'''Hint:''' You can see which config file is used with 'ppc386 -vt bogus' |
− | : Remove | + | :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 : | + | 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 | + | :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 ' | + | :'''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 | + | 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 | + | :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 | + | 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 | + | 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 | + | 8. If you are still not succeeded try to use samplecfg script as follows: |
− | ''#'' cd / usr / lib / fpc / '' version ''/ | + | ''#'' cd /usr/lib/fpc/''version''/ |
− | ''#'' sudo. / samplecfg / usr / lib / fpc / '' \ $ version '' / etc | + | ''#'' sudo ./samplecfg /usr/lib/fpc/''\$version'' /etc |
− | Note! | + | 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 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 adva a forráskódok könyvtárának új útvonala, 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'=== |
− | + | Telepítsd a gdk-pixbuf függvénytárat a gtk1.x-hez: | |
− | + | A gdk-pixbuf függvénytár megtalálható a következő helyeken: | |
− | + | RPM csomagok: | |
− | http://rpmfind.net/linux/rpm2html/search.php?query=gdk-pixbuf&submit=Search+...&system=&arch = | + | http://rpmfind.net/linux/rpm2html/search.php?query=gdk-pixbuf&submit=Search+...&system=&arch= |
− | Debian | + | Debian csomagok: |
− | libgdk - pixbuf - dev | + | libgdk-pixbuf-dev |
− | + | Forráskódok: | |
ftp://ftp.gnome.org/pub/gnome/unstable/sources/gdk-pixbuf/ | ftp://ftp.gnome.org/pub/gnome/unstable/sources/gdk-pixbuf/ | ||
− | + | Külső hivatkozások: | |
− | + | [http://www.besttermpaper.com/ termpapers] | |
− | [ http://www.besttermpaper.com/ termpapers ] | ||
− | ''' Ubuntu 8.10 : ''' | + | '''Ubuntu 8.10:''' |
− | + | Ha a Lazarus-t GTK 2-0 változattal fordítod hibaüzenetet kapsz arról, hogy a "libgdk-pixbuf2.0" nem található. Csak telepítsd a libgtk2.0-dev csomagot az apt-vel így: | |
− | + | apt-get install libgtk2.0-dev | |
− | === SuSE | + | ===SuSE rendszeren ezt kapom: '/usr/bin/ld: cannot find -lgtk Error: Error while linking'=== |
− | + | Régebbi SuSE változatokban (SuSE 11 előtt) telepíteni kell a gtk fejlesztői függvénytárakat a /opt/gnome/lib (vagy a /opt/gnome/lib64 64-bites rendszeren) könyvtárba, ami nem a szabványos elhelyezés a függvénytárak számára. Add a könyvtárat az /etc/fpc.cfg-hez (-Fl/opt/gnome/lib). | |
− | === | + | ===A Lazarus összeomlik 'runtime error 211' hibával, miután egy komponenst telepítettem=== |
− | a | + | Egy komponens telepítése után a Lazarus összeomlik a következő üzenettel: |
− | + | Threading has been used before cthreads was initialized. | |
− | + | Make cthreads one of the first units in your uses clause. | |
− | + | Runtime error 211 at $0066E188 | |
− | + | Hogyan javítsam? | |
− | + | A fissen telepített komponens szálakkal (threads) dolgozik. Az FPC *nix rendszereken nem építi be automatikusan a szálak támogatását, de szükség van rá. Ennek elindítása a cthreads unitban történik. Minden alkalmazásban, amely a komponenst használja, a főprogram uses részéhez kell adni a cthreads unitot. Ez alól maga a Lazarus sem kivétel. Ez két módon lehetséges: | |
− | 1) | + | 1) Nyisd meg a csomagot. A csomagszerkesztőben kattints az ''Options''-ra. A ''Usage'' lapon add a ''custom'' sorhoz a '''-dUseCThreads''' kapcsolót. Ezután építsd újra az IDE-t. Így a cthreads unit automatikusan használva lesz az IDE-ben unix alatt és a cthreads el lesz indítva. |
− | 2) | + | 2) A csomagok módosításának elkerüléséhez, az FPC fordító parancssori kapcsolójának közvetlen használata szükséges. A kattints a ''Tools->Configure "build Lazarus"'' menüpontra. A megjelenő ablakban a Lazarus építési beállításai találhatók, ahol az "Options:" mezőbe írd be '''-Facthreads''' és kattints az "OK" gombra. A következő lépés a csomag telepítése. A Lazarus a -Facthreads kapcsolóval lesz újraépítve ami azt jelenti hogy a főprogram úgy lesz értelmezve mintha a cthreads unit mindig ott lenne elsőként a uses részben |
− | '' | + | ''Tipp:'' A régi (össze nem omló) Lazarus is megtalálható lazarus.old néven, ugyanabban a könyvtárban ahol az összeomló Lazarus futtatható állomány van. |
− | + | Lásd még: [[Multithreaded_Application_Tutorial#Units_needed_for_a_multithreaded_application]] ''(angol)'' | |
− | === | + | ===Amikor egy szálakkal (threads) dolgozó programot futtatok, hibaüzenetet kapok: 'runtime error 232'=== |
− | + | ||
− | + | A fordító hibaüzenete a következő: | |
− | + | 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 | |
− | ''' | + | '''Megoldás''': Add a cthreads unitot elsőként a uses részhez a főprogramodban, ami általában egy .lpr fájl. |
− | === Ubuntu Breezy / Mandriva KDE3 | + | === Ubuntu Breezy/Mandriva KDE3 használatakor a betűk a Lazarus IDE-ben túl nagyok === |
− | Lazarus | + | A Lazarus a Gtk1.2-re lett fordítva, a Gnome betűtípus beállításai nincsenek hatással a programra, mivel azok a Gtk2-re vonatkoznak. |
− | + | Próbáld meg így: | |
− | + | Hozz létre egy fájlt .gtkrc.mine néven a felhasználói (home) könyvtáradban (ha még nincs ott) és add | |
− | + | hozzá ezeket a sorokat: | |
<pre> | <pre> | ||
− | style "default -text " { | + | style "default-text" { |
− | + | fontset = "-*-arial-medium-r-normal--*-100-*-*-*-*-iso8859-1,\ | |
− | + | -*-helvetica-medium-r-normal--*-100-*-*-*-*-*-*" | |
} | } | ||
− | class " GtkWidget "style "default -text " | + | class "GtkWidget" style "default-text" |
− | < / pre > | + | </pre> |
− | + | Ha ez nem elég, próbálj létrehozni egy .gtkrc szimbolikus linket ami a .gtkrc.mine fájlra mutat. Ez a megoldás működött Xubuntu 7.10, Mandriva 2009.0 KDE3 rendszereken. | |
− | === | + | ===Hogyan használhatnak a gtk programjaim különböző .rc fájlokat?=== |
− | a) | + | a) lehetőség: |
− | + | Nevezd át az rc fájlt ''programod.gtkrc'' névre és helyezd át ugyanabba a könyvtárba ahol a futtatható állomány van. | |
− | b ) | + | b) lehetőség: |
− | + | Használd a ''GtkInt'' unitot és a következő függvényhívást: ''GTKWidgetSet.SetRCFilename('kiválasztott_rc_fájl');'' | |
− | + | Ezt a legjobb az ''Application.Initialize'' művelet előtt megtenni az .lpr fájlban ''{$IFDEF LCLGtk}'' direktívával. | |
− | c ) | + | c) lehetőség: |
− | + | Használd a ''gtk2'' unitot és a ''gtk_rc_parse('kiválasztott_rc_fájl'));'' valamint a ''gtk_rc_reparse_all;'' függvényhívásokat. | |
− | === Ubuntu | + | ===Ubuntu-t használok és nem tudok Gtk2-re fordítani, hiányzó függvénytárak miatt=== |
− | + | Az Ubuntu esetében gondot okoz hogy nincsenek minden esetben létrehozva a szimbolikus hivatkozások még akkor sem ha egyébként a függvénytárak telepítve vannak. | |
− | + | Mielőtt Gtk2-re fordítasz ellenőrizd, hogy minden hiányzó függvénytárhoz létezik a megfelelő szimbolikus link. Ilyesmit kell tenned: | |
<pre> | <pre> | ||
− | cd / usr / lib | + | cd /usr/lib |
− | sudo ln -s libgdk - x11- 2.0.so.0 libgtk - x11- 2.0.so | + | sudo ln -s libgdk-x11-2.0.so.0 libgtk-x11-2.0.so |
− | < / pre > | + | </pre> |
− | + | Ellenőrizd, hogy a [valami].so szimbolikus hivatkozás létezik és az aktuális függvénytárra mutat. | |
− | === | + | ===Hogyan fordíthatok egy programot Gtk2-re?=== |
− | + | A Gtk2-re fordított IDE egyelőre nem teljesen stabil, de fordíthatsz szoftvert Gtk2-re a Gtk1-es IDE használatával. | |
− | + | Először az LCL újrafordítása szükséges Gtk2-re. A menüben kattints "Tools->Configure Build Lazarus" pontra, majd az LCL-nél válaszd a "clean+build"-et és minden másnál "none"-t. Ezután kattints az "OK" gombra. | |
− | + | A menüben kattints a "Tools->Build Lazarus" pontra. | |
− | + | Most már fordíthatod a szoftveredet Gtk2-re ha "Compiler options" között az ablakelemkészletet (widgetset) Gtk2-re állítod. | |
− | === | + | ===Ezt az üzenetet kapom: "[WARNING] ** Multibyte character encodings (like UTF8) are not supported at the moment."=== |
− | + | Ez a hiba nem fordul elő a 10535 (0.9.21) számú változat utáni kiadásokban. | |
− | + | Ezt megelőzően figyelmeztetésként szolgált UTF-8 kódolt szövegek használata esetén. | |
− | + | A belső kulcskezelő eljárások gtk1 esetében nem tudták kezelni az igy kódolt billentyűleütéseket, ami azzal járt hogy például ékezetes karakterek esetében rosszul vagy egyáltalán nem érzékelte őket. | |
− | ( | + | (eredeti szöveg régebbi Lazarus változatokhoz)<br> |
<strike> | <strike> | ||
− | + | Ez a figyelmeztetés azt jelenti hogy utf-8 karakterkódolást használsz. Amennyiben Gtk 1-et használsz ez komoly probléma lehet és megakadályozhatja a Lazarus vagy a vele készített alkalmazások megfelelő működését. | |
− | + | A megoldás, hogy átállítod a helyi karakterkódolást nem utf-8 módra mielőtt a parancssorból elindítod a programot, így: | |
<pre> | <pre> | ||
− | export LC_CTYPE = " pt_BR " | + | export LC_CTYPE="pt_BR" |
− | export LANG = " pt_BR " | + | export LANG="pt_BR" |
− | export LANGUAGE = " pt_BR " | + | export LANGUAGE="pt_BR" |
− | . / lazarus | + | ./lazarus |
− | < / pre > | + | </pre> |
− | + | A pt_BR helyére természetesen a te országod azonosítója kerüljön. Az automatikus beállításhoz szkriptet is készíthetsz. | |
− | < / strike > | + | </strike> |
== Windows == | == 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 ==== | + | ====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 .==== | + | ====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 | + | 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 == | == 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) | + | *Code > Unit style > Smart linkable (-CX) |
− | * Linking > Link Style> Link | + | *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ó. | |
− | == | + | == A fórum használata == |
− | === | + | === Miként tehetek fel kérdéseket helyesen a fórumban? === |
− | + | Első és legfontosabb: Mindig tudnod kell melyik Lazarus, FPC, Ablakelemkészlet (widgetset), CPU és Operációs Rendszer (pontosan meghatározott) )változatot használod! Nem elég annyi hogy a "legfrissebb", mindig egyértelmű verziószámot adj meg. Napi kód esetén (fejlesztői változat) a felülvizsgálat száma (revision number) és/vagy dátuma is fontos. | |
− | + | Amikor arról érdeklődsz, hogy valami miért nem működik mindig mellékelj egy rövid forráskódot, ami bemutatja a problémát és gyakran egy kép is hasznos lehet. Képeket feltölthetsz a http://imageshack.us/ és hasonló oldalakra, aztán add meg a linket. | |
− | + | Próbálj meg általános áttekintést és lehetőleg minél részletesebb leírást is adni a problémáról. | |
− | + | Arról, hogy miként tehetsz fel kérdéseket intelligens módon, itt olvashatsz: http://catb.org/esr/faqs/smart-questions.html | |
− | == | + | == Közreműködők és megjegyzések == |
− | + | Ez az oldal az angol nyelvű oldal fordítása, mely az epikwiki [http://lazarus-ccr.sourceforge.net/index.php?wiki=LazarusFaq változat] alapján készült. | |
− | <!--[[ Category : Lazarus / | + | <!--[[Category:Lazarus/hu]]--> |
Revision as of 13:35, 29 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.
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
- Ellenőrizd, hogy a fordító megfelő változatát használod
- Ellenőrizd, hogy a függvénytárak (fpc) ugyanehhez a változathoz valók
- Ellenőrizd, hogy a fordító telepítési útvonalának nevében vannak-e szóközök. Ne legyenek!
- Ellenőrizd, hogy van-e fpc.cfg fájl és nincs régi ppc386.cfg
- 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
Hogyan használhatom a hibakeresőt az IDE nélkül?
Tudom futtatni a hibakeresőt, de ddd nem találja a forráskódjaimat vagy panaszkodik, hogy nincs bennük kód. Mi ez?
Hibaüzenetet kapok az összefűzés közben, ami azt mondja "/usr/bin/ld can't find -l<valami_lib>"
Hogyan alakíthatok át kylix 2 projektet Lazarus projekté?
Amikor a Lazarus-t fordítom a fordító nem talál egy unitot. pl.: "gtkint.pp(17,16) Fatal: Can't find unit GLIB"
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 adva a forráskódok könyvtárának új útvonala, 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'
Telepítsd a gdk-pixbuf függvénytárat a gtk1.x-hez:
A gdk-pixbuf függvénytár megtalálható a következő helyeken:
RPM csomagok: http://rpmfind.net/linux/rpm2html/search.php?query=gdk-pixbuf&submit=Search+...&system=&arch=
Debian csomagok: libgdk-pixbuf-dev
Forráskódok: ftp://ftp.gnome.org/pub/gnome/unstable/sources/gdk-pixbuf/
Külső hivatkozások: termpapers
Ubuntu 8.10:
Ha a Lazarus-t GTK 2-0 változattal fordítod hibaüzenetet kapsz arról, hogy a "libgdk-pixbuf2.0" nem található. Csak telepítsd a libgtk2.0-dev csomagot az apt-vel így:
apt-get install libgtk2.0-dev
SuSE rendszeren ezt kapom: '/usr/bin/ld: cannot find -lgtk Error: Error while linking'
Régebbi SuSE változatokban (SuSE 11 előtt) telepíteni kell a gtk fejlesztői függvénytárakat a /opt/gnome/lib (vagy a /opt/gnome/lib64 64-bites rendszeren) könyvtárba, ami nem a szabványos elhelyezés a függvénytárak számára. Add a könyvtárat az /etc/fpc.cfg-hez (-Fl/opt/gnome/lib).
A Lazarus összeomlik 'runtime error 211' hibával, miután egy komponenst telepítettem
Egy komponens telepítése után a Lazarus összeomlik a következő üzenettel:
Threading has been used before cthreads was initialized. Make cthreads one of the first units in your uses clause. Runtime error 211 at $0066E188
Hogyan javítsam?
A fissen telepített komponens szálakkal (threads) dolgozik. Az FPC *nix rendszereken nem építi be automatikusan a szálak támogatását, de szükség van rá. Ennek elindítása a cthreads unitban történik. Minden alkalmazásban, amely a komponenst használja, a főprogram uses részéhez kell adni a cthreads unitot. Ez alól maga a Lazarus sem kivétel. Ez két módon lehetséges:
1) Nyisd meg a csomagot. A csomagszerkesztőben kattints az Options-ra. A Usage lapon add a custom sorhoz a -dUseCThreads kapcsolót. Ezután építsd újra az IDE-t. Így a cthreads unit automatikusan használva lesz az IDE-ben unix alatt és a cthreads el lesz indítva.
2) A csomagok módosításának elkerüléséhez, az FPC fordító parancssori kapcsolójának közvetlen használata szükséges. A kattints a Tools->Configure "build Lazarus" menüpontra. A megjelenő ablakban a Lazarus építési beállításai találhatók, ahol az "Options:" mezőbe írd be -Facthreads és kattints az "OK" gombra. A következő lépés a csomag telepítése. A Lazarus a -Facthreads kapcsolóval lesz újraépítve ami azt jelenti hogy a főprogram úgy lesz értelmezve mintha a cthreads unit mindig ott lenne elsőként a uses részben
Tipp: A régi (össze nem omló) Lazarus is megtalálható lazarus.old néven, ugyanabban a könyvtárban ahol az összeomló Lazarus futtatható állomány van.
Lásd még: Multithreaded_Application_Tutorial#Units_needed_for_a_multithreaded_application (angol)
Amikor egy szálakkal (threads) dolgozó programot futtatok, hibaüzenetet kapok: 'runtime error 232'
A fordító hibaüzenete a következő:
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
Megoldás: Add a cthreads unitot elsőként a uses részhez a főprogramodban, ami általában egy .lpr fájl.
Ubuntu Breezy/Mandriva KDE3 használatakor a betűk a Lazarus IDE-ben túl nagyok
A Lazarus a Gtk1.2-re lett fordítva, a Gnome betűtípus beállításai nincsenek hatással a programra, mivel azok a Gtk2-re vonatkoznak. Próbáld meg így: Hozz létre egy fájlt .gtkrc.mine néven a felhasználói (home) könyvtáradban (ha még nincs ott) és add hozzá ezeket a sorokat:
style "default-text" { fontset = "-*-arial-medium-r-normal--*-100-*-*-*-*-iso8859-1,\ -*-helvetica-medium-r-normal--*-100-*-*-*-*-*-*" } class "GtkWidget" style "default-text"
Ha ez nem elég, próbálj létrehozni egy .gtkrc szimbolikus linket ami a .gtkrc.mine fájlra mutat. Ez a megoldás működött Xubuntu 7.10, Mandriva 2009.0 KDE3 rendszereken.
Hogyan használhatnak a gtk programjaim különböző .rc fájlokat?
a) lehetőség: Nevezd át az rc fájlt programod.gtkrc névre és helyezd át ugyanabba a könyvtárba ahol a futtatható állomány van.
b) lehetőség: Használd a GtkInt unitot és a következő függvényhívást: GTKWidgetSet.SetRCFilename('kiválasztott_rc_fájl'); Ezt a legjobb az Application.Initialize művelet előtt megtenni az .lpr fájlban {$IFDEF LCLGtk} direktívával.
c) lehetőség: Használd a gtk2 unitot és a gtk_rc_parse('kiválasztott_rc_fájl')); valamint a gtk_rc_reparse_all; függvényhívásokat.
Ubuntu-t használok és nem tudok Gtk2-re fordítani, hiányzó függvénytárak miatt
Az Ubuntu esetében gondot okoz hogy nincsenek minden esetben létrehozva a szimbolikus hivatkozások még akkor sem ha egyébként a függvénytárak telepítve vannak.
Mielőtt Gtk2-re fordítasz ellenőrizd, hogy minden hiányzó függvénytárhoz létezik a megfelelő szimbolikus link. Ilyesmit kell tenned:
cd /usr/lib sudo ln -s libgdk-x11-2.0.so.0 libgtk-x11-2.0.so
Ellenőrizd, hogy a [valami].so szimbolikus hivatkozás létezik és az aktuális függvénytárra mutat.
Hogyan fordíthatok egy programot Gtk2-re?
A Gtk2-re fordított IDE egyelőre nem teljesen stabil, de fordíthatsz szoftvert Gtk2-re a Gtk1-es IDE használatával.
Először az LCL újrafordítása szükséges Gtk2-re. A menüben kattints "Tools->Configure Build Lazarus" pontra, majd az LCL-nél válaszd a "clean+build"-et és minden másnál "none"-t. Ezután kattints az "OK" gombra.
A menüben kattints a "Tools->Build Lazarus" pontra.
Most már fordíthatod a szoftveredet Gtk2-re ha "Compiler options" között az ablakelemkészletet (widgetset) Gtk2-re állítod.
Ezt az üzenetet kapom: "[WARNING] ** Multibyte character encodings (like UTF8) are not supported at the moment."
Ez a hiba nem fordul elő a 10535 (0.9.21) számú változat utáni kiadásokban. Ezt megelőzően figyelmeztetésként szolgált UTF-8 kódolt szövegek használata esetén.
A belső kulcskezelő eljárások gtk1 esetében nem tudták kezelni az igy kódolt billentyűleütéseket, ami azzal járt hogy például ékezetes karakterek esetében rosszul vagy egyáltalán nem érzékelte őket.
(eredeti szöveg régebbi Lazarus változatokhoz)
Ez a figyelmeztetés azt jelenti hogy utf-8 karakterkódolást használsz. Amennyiben Gtk 1-et használsz ez komoly probléma lehet és megakadályozhatja a Lazarus vagy a vele készített alkalmazások megfelelő működését.
A megoldás, hogy átállítod a helyi karakterkódolást nem utf-8 módra mielőtt a parancssorból elindítod a programot, így:
export LC_CTYPE="pt_BR" export LANG="pt_BR" export LANGUAGE="pt_BR" ./lazarus
A pt_BR helyére természetesen a te országod azonosítója kerüljön. Az automatikus beállításhoz szkriptet is készíthetsz.
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ó.
A fórum használata
Miként tehetek fel kérdéseket helyesen a fórumban?
Első és legfontosabb: Mindig tudnod kell melyik Lazarus, FPC, Ablakelemkészlet (widgetset), CPU és Operációs Rendszer (pontosan meghatározott) )változatot használod! Nem elég annyi hogy a "legfrissebb", mindig egyértelmű verziószámot adj meg. Napi kód esetén (fejlesztői változat) a felülvizsgálat száma (revision number) és/vagy dátuma is fontos.
Amikor arról érdeklődsz, hogy valami miért nem működik mindig mellékelj egy rövid forráskódot, ami bemutatja a problémát és gyakran egy kép is hasznos lehet. Képeket feltölthetsz a http://imageshack.us/ és hasonló oldalakra, aztán add meg a linket.
Próbálj meg általános áttekintést és lehetőleg minél részletesebb leírást is adni a problémáról.
Arról, hogy miként tehetsz fel kérdéseket intelligens módon, itt olvashatsz: http://catb.org/esr/faqs/smart-questions.html
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.