abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 16:11 | Bezpečnostní upozornění

    V jádře Linux byla nalezena a v upstreamu již byla opravena kritická zranitelnost GhostLock aneb CVE-2026-43499. Lokálnímu uživateli umožňuje získat práva roota a také obejít kontejnerovou izolaci. Zranitelnost existovala v Linuxu 15 let, tj. od roku 2011, od Linuxu verze 2.6.39.

    Ladislav Hagara | Komentářů: 2
    včera 13:55 | IT novinky

    Evropská komise předběžně shledala, že návykový design aplikací Instagram a Facebook od americké společnosti Meta porušuje unijní nařízení o digitálních službách (DSA). Návykový design zahrnuje například takzvané nekonečné posouvání, automatické přehrávání videí, tzv. push notifikace, kdy aplikace uživatele vybízí k návratu do jejího prostředí, či vysoce personalizovaný algoritmus, který rychle pozná, co uživatele baví a snaží

    … více »
    Ladislav Hagara | Komentářů: 8
    včera 12:11 | Nová verze

    Byla vydána verze 1.97.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    včera 05:00 | IT novinky

    Švýcarská společnost Punkt. má nově v nabídce telefon Punkt. MC03. Telefon byl navržen ve Švýcarsku s důrazem na soukromí a digitální suverenitu a vyroben v Německu. V telefonu běží operační systém AphyOS (Apostrophy OS) založený na AOSP (Android Open Source Project) 15. Cena telefonu je 745 eur.

    Ladislav Hagara | Komentářů: 20
    včera 04:44 | Nová verze

    TypeScript (Wikipedie), tj. JavaScript rozšířený o statické typování a další atributy, byl vydán v nové verzi 7.0. Kompilátor byl kvůli výkonu přepsán z TypeScriptu do Go.

    Ladislav Hagara | Komentářů: 0
    9.7. 17:00 | IT novinky

    Europarlament podpořil pozměněnou verzi výjimky známé jako „chat control 1.0“ umožňující firmám skenovat soukromou komunikaci na internetu kvůli ochraně dětí před zneužitím. Pozměňovací návrhy přijaté europoslanci však počítají s tím, že z výjimky bude vyřazena šifrovaná komunikace. Výjimka přestala platit začátkem dubna poté, co se Evropský parlament a Rada EU nedokázaly shodnout na jejím prodloužení. Rada následně přijala

    … více »
    Ladislav Hagara | Komentářů: 12
    9.7. 04:44 | Bezpečnostní upozornění

    Nejnovější X.Org X server 21.1.24 a Xwayland 24.1.13 řeší 2 bezpečnostní chyby.

    Ladislav Hagara | Komentářů: 0
    9.7. 04:22 | Komunita

    Clement "Clem" Lefebvre publikoval souhrn dění v Linux Mintu za červen 2026. Vypíchnuta je vylepšená podpora Waylandu. Už není považována za experimentální. V příští verzi Linux Mintu, plánována je na Vánoce, bude běh Cinnamonu plně podporován na X11 i Waylandu. V květnu na vývoj Linux Mintu přispělo 611 dárců celkovou částkou 19 612 dolarů. Dalších 2 326 patronů přispělo na Patreonu celkovou částkou 5 334 dolarů.

    Ladislav Hagara | Komentářů: 4
    9.7. 04:00 | Bezpečnostní upozornění

    V Linuxu v KVM byla nalezena a v upstreamu již byla opravena kritická zranitelnost Januscape aneb CVE-2026-53359. Root na hostovaném počítači (virtuální stroj) může obejít izolaci a získat plnou kontrolu nad hostitelským systémem (DoS útok nebo vzdálené spuštění kódu s právy roota). Na obou hlavních architekturách – Intel i AMD. Zranitelnost v Linuxu existovala téměř 16 let (od srpna 2010 do června 2026).

    Ladislav Hagara | Komentářů: 0
    8.7. 19:44 | IT novinky

    Tribunál Soudního dvora Evropské unie dnes zamítl několik žalob, v nichž se americká společnost Apple ohrazovala proti pravidlům fungování velkých technologických společností na unijním trhu. Applu se nelíbilo, že jeho obchod s aplikacemi a operační systém iOS mají podléhat přísnějším povinnostem jen proto, že Brusel firmu považuje za takzvaného gatekeepera, tedy strážce přístupu.

    Ladislav Hagara | Komentářů: 3
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (17%)
     (31%)
     (4%)
     (6%)
     (2%)
     (16%)
     (25%)
    Celkem 2094 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: undefined reference to `vtable.. + abstraktní třídy

    13.7.2010 00:52 pnemec | skóre: 8 | blog: jotter
    undefined reference to `vtable.. + abstraktní třídy
    Přečteno: 3363×
    Mám takový problém s kompilací svých zdrojáků. Kód implementuje grafické widgety, které jsou definovány v abstraktních třídách.

    Část kódu je implementována v rodičích a část v "mém" rozšíření. Implementoval jsem všechny třídy označené jako pure virtual.

    Kód jde bez problémů zkompilovat do object file. Ve chvíly kdy zkusím zkompilovat testovací spouštěcí kód (pouze zavolám new Object()) tak se na mne vyvalí mraky hlášek o chybějící referenci ve vtables.

    Co se týče struktury kódu. Tak je tam jedna WidgetFactory, která má funkce createSomeWidget ...

    hláška vypadá asi takto: tmp/ccejkFGc.o: In function `YJCheckBoxFrame::YJCheckBoxFrame(YWidget*, std::basic_string<char, std::char_traits<char>, std::allocator <char> > const&, bool)': YJCheckBoxFrame.cpp:(.text+0xcc): undefined reference to `vtable for YJCheckBoxFrame' /tmp/ccejkFGc.o: In function `YJCheckBoxFrame::YJCheckBoxFrame(YWidget*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)': YJCheckBoxFrame.cpp:(.text+0x11a): undefined reference to `vtable for YJCheckBoxFrame' /tmp/cc1DG5TS.o:(.data.rel.ro._ZTV15YJWidgetFactory[vtable for YJWidgetFactory]+0xc): undefined reference to `YJWidgetFactory::createLayoutBox(YWidget*, YUIDimension)'

    kód kompiluji jednoduše z řádky:
    g++ *.cpp -l yui -I/usr/include/YaST2/yui
    
    V c++ jsem celkem nováček, ale co jsem se koukal co tahle chyba znamená, tak by to mělo být tak, že neimplementuji některé funkce, které předek, nebo jeden z předků označil jako pure virtual a čeka že budou vloženy do tabulky funkcí (vtable). Z chybových hlášek ale žádné chybějící funkce nevidím, tak mi to není moc jasné.

    Tuhle chybu jsem ve fórech navíc viděl je v souvislosti s QT a chybějícím includem moc souboru. To ale není můj případ.

    Budu vděčen za jakékoliv nakopnutí.


    Řešení dotazu:


    Odpovědi

    13.7.2010 02:06 vase jmeno
    Rozbalit Rozbalit vše Re: undefined reference to `vtable.. + abstraktní třídy
    Rekl bych, ze problem bude v tom, ze pure virtual metoda predka je sice potomkem deklarovana (tudiz kompilator nerve nic o instanciaci abstraktnich trid), ale chybi jejich implementace (tudiz rve az linker). Zkuste se podivat, jestli jsou vsechny deklarovane metody opravdu definovane a jestli se vsechny opravdu linkuji k vysledne binarce.
    13.7.2010 10:45 vencas | skóre: 32
    Rozbalit Rozbalit vše Re: undefined reference to `vtable.. + abstraktní třídy
    Všechny třídy, které nejsou abstraktní, musejí mít (aby se jim vytvořila vtable) aspoň jednu virtuální metodu implementovanou ne-inline, v implementačním filu, který se linkuje. Podrobnějí GCC FAQ. Obvykle to řeším tak, že v hlavičce deklaruju virtuální destruktor a do implementace napíšu jeho implementaci, která je prázdná.
    14.7.2010 14:39 pnemec | skóre: 8 | blog: jotter
    Rozbalit Rozbalit vše Re: undefined reference to `vtable.. + abstraktní třídy
    O vtables jsem si musel přečíst už před tím, takže tohle jsem tak nějak věděl.

    Nicméně zmínka o destruktoru mě přivedla na zbytek řešení těch chybových hlášek.

    Musím říci že mi ty abstraktní třídy v c++ vůbec nejsou jasné. V jave (můj "domovský" jazyk) je to takž že jsou interface ( vše je "pure virtual") abstract (nelze vytvořit instanci) a pak standardní třída. Zdá se že v c++ je možné do abstraktní třídy linkovat implementace až za běhu pomocí vtables?

    Neznáte na to náhodou nějakou podrobnější dokumentaci?

    14.7.2010 17:09 Sten
    Rozbalit Rozbalit vše Re: undefined reference to `vtable.. + abstraktní třídy
    Nemusí být explicitně v definičním souboru, ale musí být definované (nestačí deklarace) a definice, pokud je v hlavičkovém souboru, musí být použita (includována) nejméně v jenom definičním souboru
    14.7.2010 14:35 pnemec | skóre: 8 | blog: jotter
    Rozbalit Rozbalit vše Re: undefined reference to `vtable.. + abstraktní třídy
    Původně jsem si myslel že jsou, ale nakonec dle upozornění od Stena jsem zjistil že ne.

    Ten projekt (Yast UI) je trochu složitější na učení C++.
    Řešení 1× (pnemec (tazatel))
    13.7.2010 16:54 Sten
    Rozbalit Rozbalit vše Re: undefined reference to `vtable.. + abstraktní třídy
    Chybějící funkce tam jsou, dokonce jsou i v chybových hláškách:
    /tmp/cc1DG5TS.o:(.data.rel.ro._ZTV15YJWidgetFactory[vtable for YJWidgetFactory]+0xc): undefined reference to `YJWidgetFactory::createLayoutBox(YWidget*, YUIDimension)'
    14.7.2010 14:24 pnemec | skóre: 8 | blog: jotter
    Rozbalit Rozbalit vše Re: undefined reference to `vtable.. + abstraktní třídy
    Chvíli jsem na to koukal a zjistil jsem že v polovině funkcí ve WidgetFactory chybý jméno class před jménem funkce. Holt jiný návyk z javy :)

    Přidání classy tu chybovou hlášku pro YJWidgetFactory opravilo.
    14.7.2010 14:33 pnemec | skóre: 8 | blog: jotter
    Rozbalit Rozbalit vše Re: undefined reference to `vtable.. + abstraktní třídy
    A zbytek těch hlášek byl chybějící konstruktor, který jsem z mladické nerozvážnosti připsal do YJCheckBoxFrame.h.

    gcc má skutečně kryptické hlášky :)

    Dík za radu
    14.7.2010 14:41 pnemec | skóre: 8 | blog: jotter
    Rozbalit Rozbalit vše Re: undefined reference to `vtable.. + abstraktní třídy
    Dík moc za rady, jako řešení jsem nakonec označil to co mě nejvíce nakoplo.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.