[HU] Haiku fejlesztés - kezdőknek

Sziasztok!

A kérésnek megfelelően külön témát nyitottam a fejlesztési kérdéseknek. Betettem a “kezdőknek” szót, mivel az első néhány hozzászólási lehetőségben szeretnék én (is) pár olyan szakmai kérdést feltenni, ami a többieknek talán már lényegtelen részlet lehet, de hát a kezdőknek minden újnak számít.

Kezdődjék hát az eszme-csere!

Cz

A korábban feltett kérdésem a másik témából:

Közben próbálok pár projektet lefordítani a Paladin segítségével (https://github.com/HaikuArchives/WakeUp és https://github.com/HaikuArchives/KanjiSaver), de a build folyamán hibaüzenettel leáll a folyamat. A hibaüzeneteket sem tudom még egyelőre ide kimásolni, a mai nap eredménye egyelőre az, hogy sshfs-en tudok állományokat cserélni a Haiku és az Ubuntu között, a vágólap adattartalma még nem akar átjönni.
Lényegében az érdekelne, milyen munkamenetet építsek ki annak érdekében, hogy a github-ról letöltött forrásokat le tudjam fordítani, illetve hogyan tudom összegyógyítani ezt a folyamatot valamelyik IDE-vel?

Most néztem meg ezt a példát, nagyszerűen lefutott:
http://blog.leahhanson.us/post/haiku-first-gui-program.html
Most már csak a második GUI program megírása maradt hátra :slight_smile:

1 Like

WakeUp esetében nálam ez a hiba:

/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/WakeUp/(Objects.WakeUp)/buzzwindow.o: in function `BuzzWindow::MessageReceived(BMessage*)':
buzzwindow.cpp:(.text+0x64a): undefined reference to `BGameSound::operator new(unsigned long)'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: buzzwindow.cpp:(.text+0x666): undefined reference to `BFileGameSound::BFileGameSound(entry_ref const*, bool, BGameSoundDevice*)'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: buzzwindow.cpp:(.text+0x676): undefined reference to `BGameSound::InitCheck() const'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: buzzwindow.cpp:(.text+0xa00): undefined reference to `BGameSound::operator delete(void*)'
collect2: error: ld returned 1 exit status

Tehát hiányzó symbol, hozzá kéne adni a hiányzó libeket. A vele szállított makefile szerint LIBS = be game kell neki.
Paladinban a Project → Change system libraries… menüpontra kattintva majd (sok várakozás után!!!) lefelé szkrollozva az egérrel megtalálhatod a libgame-t és a libbe-t, ezeket megjelölve, majd az ablakot bezárva a projekt szépen lefordul.

KanjiSaver-nél:

/RAMDisk/KanjiSaver
----------
Command succeeded. Use 'Import existing project' function in the main window to load the project from the local filesystem
----------
BHandler w>Paladin: KanjiSaver: MessageReceived() couldn't understand the message:
BMessage('DATA') {
        src_window = (type = 'PNTR')(size = 8)
        click_pt = BPoint(x:84, y:228)
        TrackerViewToken = (type = 'MSNG')(size = 24)
        refs[0] = entry_ref(device=9, directory=524537, name="KanjiSaver.cpp", path="/RAMDisk/KanjiSaver/KanjiSaver.cpp")
        refs[1] = entry_ref(device=9, directory=524537, name="KanjiSaverConfigView.cpp", path="/RAMDisk/KanjiSaver/KanjiSaverConfigView.cpp")
        refs[2] = entry_ref(device=9, directory=524537, name="RandomColor.cpp", path="/RAMDisk/KanjiSaver/RandomColor.cpp")
        buttons = int32(0x1 or 1)
        _drop_point_ = BPoint(x:82, y:71)
        _drop_offset_ = BPoint(x:82, y:127)
}
Spawning build thread 73487
Spawning build thread 73488
Spawning build thread 73489
Thread 73487 is precompiling file KanjiSaver.cpp
Thread 73487 is compiling file KanjiSaver.cpp
Thread 73488 is precompiling file KanjiSaverConfigView.cpp
Thread 73488 is compiling file KanjiSaverConfigView.cpp
Thread 73489 is precompiling file RandomColor.cpp
Thread 73489 is compiling file RandomColor.cpp
Command exited normally
Thread 73489 compiling complete for file RandomColor.cpp
Command exited normally
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /boot/system/develop/lib/start_dyn.o: in function `_start':
start_dyn.c:(.text+0x3b): undefined reference to `main'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o: in function `KanjiSaver::KanjiSaver(BMessage*, int)':
KanjiSaver.cpp:(.text+0x99): undefined reference to `BScreenSaver::BScreenSaver(BMessage*, int)'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: KanjiSaver.cpp:(.text+0x323): undefined reference to `BScreenSaver::~BScreenSaver()'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o: in function `KanjiSaver::~KanjiSaver()':
KanjiSaver.cpp:(.text+0x3c7): undefined reference to `BScreenSaver::~BScreenSaver()'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o: in function `KanjiSaver::StartSaver(BView*, bool)':
KanjiSaver.cpp:(.text+0x860): undefined reference to `BScreenSaver::SetTickSize(long)'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0x30): undefined reference to `BScreenSaver::StopSaver()'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0x40): undefined reference to `BScreenSaver::DirectConnected(direct_buffer_info*)'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0x48): undefined reference to `BScreenSaver::DirectDraw(int)'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0x58): undefined reference to `BScreenSaver::StopConfig()'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0x60): undefined reference to `BScreenSaver::SupplyInfo(BMessage*) const'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0x68): undefined reference to `BScreenSaver::ModulesChanged(BMessage const*)'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0x78): undefined reference to `BScreenSaver::_ReservedScreenSaver1()'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0x80): undefined reference to `BScreenSaver::_ReservedScreenSaver2()'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0x88): undefined reference to `BScreenSaver::_ReservedScreenSaver3()'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0x90): undefined reference to `BScreenSaver::_ReservedScreenSaver4()'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0x98): undefined reference to `BScreenSaver::_ReservedScreenSaver5()'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0xa0): undefined reference to `BScreenSaver::_ReservedScreenSaver6()'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0xa8): undefined reference to `BScreenSaver::_ReservedScreenSaver7()'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTV10KanjiSaver[_ZTV10KanjiSaver]+0xb0): undefined reference to `BScreenSaver::_ReservedScreenSaver8()'
/boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/11.2.0/../../../../x86_64-unknown-haiku/bin/ld: /RAMDisk/KanjiSaver/(Objects.KanjiSaver)/KanjiSaver.o:(.data.rel.ro._ZTI10KanjiSaver[_ZTI10KanjiSaver]+0x10): undefined reference to `typeinfo for BScreenSaver'
collect2: error: ld returned 1 exit status

A Makefile szerint: LIBS = be screensaver
Ezeket hozzáadva ugyanúgy, mint a WakeUp esetében szintén lefordul. Igaz, hogy ez egy SHARED LIBRARY, ezért a projekt-templétnél (Project → Settings-nél a Target-nél utólag megváltoztatható) azt kell választani.

Egyébként mind a WakeUp, mint a KanjiSaver forrása tartalmaz egy makefile-t, ami a Haiku féle MakefileEnginre épül, elég belépned Terminálban a forrás könyvtárába és kiadnod a make parancsot. Nem kell hozzá semmiféle IDE.

Mennyi időt kell várni? Egy jó 20 perc után eluntam, a libbe.so utáni sort már nem tudtam megnézni, a gördítősáv nem működött, az ablakot meg csak addig tudtam lehúzni. Ehhh, türelmetlen voltam? :slight_smile:

Nálam csak egyszer működött a gördítősáv, úgyhogy folyamatosan toltam ki felfelé az ablakot és méreteztem át lefelé, hogy aztán így “odaszkrollozzam” a tartalmat. Működött, de én inkább a makefile-engine-t használnám, mert ez így szerencsétlenkedés.

S persze jelenthetnéd a hibát: https://github.com/adamfowleruk/Paladin ,
bár úgy tűnik, tudnak róla: https://github.com/adamfowleruk/Paladin/issues/373

Sikerült a Paladinban összebarkácsolnom az első programomat (a c++ nyelvvel is most ismerkedem komolyabban). Az osztályszerkezet alapjai megvannak, a dokumentáció lesz a jó barátom a jövőben :slight_smile:

A program egyelőre a gombnyomogatást számolja, később a többi GUI elemet is felvonultatom.

Viszont a Paladin kapcsán egy furcsa jelenségbe belefutottam. Amikor megírtam a kódomat, a Build menüpontban a RUN menüre indítom a programot. Néha ezután a Project és a Build menüpont inaktívvá, szürkéte vált és csak a Paladin újraindításával válnak működőképessé.

Ez bug vagy feature? Vagy én bénázok el valamit?

Szerintem bug.
Gratulálok az előrehaladáshoz!

Sziasztok!

Az elmúlt egy hónapban nézegettem a forráskódokat a github-on, demo programokat írogatok, gyűjtöm az ismereteke. De most belefutottam egy problémába, ezért kérnék egy kis támogatást, ötletet.

Szeretnék egy/több képállományt megjeleníteni egy ablakban, valószínűleg egy bview lesz a barátom. Egyrészt szeretnék betölteni egy PNG állományt és itt elakadtam. Ezt valószínűleg egy BView::DrawBitmap metódussal kell elkövetni.

Ott akadtam el, hogy egy bview-hoz az AddChild metódussal akartam egy BStringView-t rakni, majd ezt BLayoutBuilder-ben megjeleníteni, de nem adott eredményt.

Szóval egy tisztázó kódot szabadna kérnem, hogy milyen minta alapján kell ezt rendesen megírni?

Ma is gyűrtem a forráskódokat, de csak részben sikerült előrébb jutnom. Létrehozok egy BView-t, látszik, mert átszíneztem :slight_smile: Ebben szeretnék egy kép állományt betölteni. Úgy látszik, ezt nem lehet közvetlenül megtenni.

BTranslationUtils::GetBitmap(‘rGFX’,path);

Itt a path nem egy sima sting, hanem valami BEntry. Nagy talány, hogyan alakítom át a sima gyökér könyvtárban eltárolt “Miez.png” állomány elérhetőségét olyan formára, hogy a GetBitmap() elfogadja.

Ááááááá… No, kikerekedett végül valami.
Már a Haiku forrását is elkezdtem átnézni, csak hogy valami értelmes információhoz jussak (említettem már, hogy mintha roppant alul dokumentált lenne ez a projekt, legalábbis egy kezdő számára? :slight_smile: ). Elkezdtem nézegetni a beépített alkalmazások forrását is - meglepően rendezett a forráskód.

Egy szó, mint száz, végül a BTranslationUtils::GetBitmapFile() függvény lett a befutó.

Most ezt szeretném forgatni, meg rajzolni rá, de valószínűleg ezt majd jövő héten teszem, mert iszonyúan sok időt eltöltöttem próbálgatásokkal.

És még egy: bár kezdésnek a Paladin egy csodálatos eszköznek látszik, a végén már én is egy Makefile alapján fordítottam a kódot.