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í
×

dnes 19:44 | Zajímavý software

Spolek vpsFree.cz na svém blogu informuje, že přechází z OpenVZ na vpsAdminOS. Distribuce vpsAdminOS je založena na NixOS a not-os. Pokud provozujete OpenVZ Legacy a nevíte co dál, můžete zvážit vpsAdminOS, který je na migraci kontejnerů z OpenVZ připraven.

Ladislav Hagara | Komentářů: 0
dnes 10:22 | Komunita

Minulý týden byla ze správce souborů (Files, Soubory, Nautilus) v GNOME odstraněna možnost spouštění aplikací. Po bouřlivé diskusi byla dnes tato možnost do správce souborů vrácena (commit).

Ladislav Hagara | Komentářů: 21
včera 22:44 | Nová verze

Ani ne po měsíci vývoje od vydání verze 2.10.0 byla vydána nová verze 2.10.2 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP. Přehled novinek i s náhledy v oznámení o vydání. Opraveno bylo 44 chyb. Novinkou je podpora formátu HEIF (High Efficiency Image File Format) a dva nové filtry.

Ladislav Hagara | Komentářů: 44
včera 17:44 | Komunita

SFC (Software Freedom Conservancy) na svém blogu blahopřeje společnosti Tesla k prvnímu kroku k dodržování licence GPL. Tesla ve svých elektromobilech používá svobodný software. Změny ve zdrojovým kódech ale doteď veřejně nezveřejňovala. Změna nastala tento týden. Zdrojové kódy byly zveřejněny na GitHubu. Nejedná se zatím ale o kompletní odpovídající zdrojové kódy (CCS - complete corresponding source).

Ladislav Hagara | Komentářů: 14
19.5. 17:33 | Komunita

Společnost Purism informuje o aktuálním vývoji chytrého telefonu Librem 5, jenž by měl respektovat bezpečnost, svobodu a soukromí uživatelů. Telefon už umí telefonovat. Librem 5 by měl být k dispozici v lednu 2019. Předobjednat jej lze za 599 dolarů.

Ladislav Hagara | Komentářů: 30
19.5. 09:00 | Bezpečnostní upozornění

Společnost Qualys zveřejnila výsledky bezpečnostního auditu procps-ng, tj. balíčku s příkazy free, kill, pgrep, pidof, pkill, pmap, ps, pwdx, skill, slabtop, snice, sysctl, tload, top, uptime, vmstat, w a watch. Nalezeno bylo 7 bezpečnostních chyb (CVE-2018-1120, CVE-2018-1121, CVE-2018-1122, CVE-2018-1123, CVE-2018-1124, CVE-2018-1125 a CVE-2018-1126). Dvě z nich jsou zneužitelné k lokální eskalaci práv. Příslušné záplaty jsou již k dispozici v upstreamu.

Ladislav Hagara | Komentářů: 5
18.5. 06:44 | Nová verze

Byla vydána třiadvacátá alfa verze svobodné historické realtimové strategie 0 A.D. (Wikipedie). Kódový název této nejnovější verze je Ken Wood. Představení novinek v poznámkách k vydání a také na YouTube.

Ladislav Hagara | Komentářů: 3
18.5. 05:55 | Zajímavý článek

Tento týden se v Cambridge ve Velké Británii konal hackfest, který měl za cíl zlepšit výkon na GNOME postavených systémů na slabších počítačích. Hans de Goede například analyzoval spotřebu paměti jednotlivých komponent ve Fedora 28 Workstation na stroji s 2 GB RAM a pomocí kroků popsaných v článku Kde uspořit paměť ve Fedora Workstation na MojeFedora.cz snížil spotřebu paměti z 1,4 GB na 765 MB.

Ladislav Hagara | Komentářů: 10
17.5. 20:55 | Nová verze

Bram Moolenaar oznámil vydání verze 8.1 textového editoru Vim (Vi IMproved). Hlavní novinkou je integrovaný terminál.

Ladislav Hagara | Komentářů: 8
17.5. 16:55 | Nová verze

Bylo oznámeno vydání nové stabilní verze 1.27 a beta verze 1.28 open source textového editoru Atom (Wikipedie). Přehled novinek i s náhledy v příspěvku na blogu. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 6
Používáte pro některé služby inetd?
 (34%)
 (24%)
 (42%)
Celkem 137 hlasů
 Komentářů: 4, poslední dnes 12:56
    Rozcestník

    Dotaz: Dynamické linkování

    29.5.2009 22:52 Dušan Renát | skóre: 4
    Dynamické linkování
    Přečteno: 1066×
    Mám program v C++ a používám v něm mimo jiné knihovnu SDL_gfx. Mám ji dynamicky linkovanou, tj. soubor .so distribuuju s programem. Mám tedy hlavní adresář projektu, kde mám mimo jiné Makefile, a adresář lib v něm, kde je knihovna. A teď:

    Knihovna musí mít název libSDL_gfx.so, jinak ji linker při zadání -lSDL_gfx a -rpath=./lib nenajde už při linkování. Pokud ji tak pojmenuju, při spouštění mi to zařve " error while loading shared libraries: libSDL_gfx.so.4: cannot open shared object file: No such file or directory". Netuším, proč se ptá na tuto verzi knihovny (pokud to číslo vůbec znamená verzi) a proč to nefunguje, když například vytvořím symbolický odkaz na původní soubor (takhle jsem to viděl udělané u sebe v /usr/lib).

    Dokáže mi prosím někdo vysvětlit, jak funguje dynamické linkování s těmahle číslama a jak to udělám, aby to našlo tu knihovnu?

    Odpovědi

    30.5.2009 09:16 frr | skóre: 33
    Rozbalit Rozbalit vše Re: Dynamické linkování

    Není to náhodou tak, že rozhoduje to, co si myslí systémový ldconfig?

    Tj. pokud soubor přejmenujete, tak na systému, kde má binár nakonec běžet, je potřeba upravit ld.so.conf (přidat správnou cestu) a spustit /sbin/ldconfig, aby se změna promítla do ld.so.cache (nebo jak se to ve Vašem distru jmenuje). Binár dynamicky slinkovaný na jednom systému proti jedné verzi knihovny (jménu souboru.so) bude fungovat transparentně i na jiném systému kde je jiná verze téže knihovny (jiné číslo ve jménu souboru .so) - za předpokladu, že na cílovém systému o knihovně ldconfig ví, a za důležitého předpokladu, že se mezi verzemi nezměnily Vámi používané prototypy funkcí a obsahy structů (jinak segfault).

    Pokud chcete "distribuovat správnou verzi knihovny se svým vlastním binárem", asi Vám nakonec nezbyde než to slinkovat staticky :-|

    Hint: zkuste se mrknout, jaké soubory to hledá, pomocí utility "strace" .

    (Jak to sakra dělá Gobo Linux?)

    A hele, ono je možné natáhnout knihovnu i explicitně / programově - ale z Cčka je to krkolomné.

    http://www.ibm.com/developerworks/linux/library/l-dynamic-libraries/index.html

    http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

    Žádná transparentnost ala perlový Dynaloader. Je to dáno rozdílem mezi staticky typovaným kompilátorem (C) a dynamickým interpreterem (Perl). Když chcete v Cčku volat funkci, třeba i nepřímo přes pointer, musíte už při kompilaci znát její prototyp (ne jméno, ale počet a typy argumentů). Nepříjemným důsledkem pro Vás je, že i když ve Vašem případě znáte předem kompletní hlavičkový soubor knihovny, tak pokud byste ji chtěl loadovat explicitně přes dlopen(), budete si muset ve Vašem kódu explicitně deklarovat prototyp ke každé funkci, kterou chcete použít (a budete ji muset volat přes pointer). Opravte mě někdo jestli kecám...

    [:wq]
    30.5.2009 09:33 vencas | skóre: 32
    Rozbalit Rozbalit vše Re: Dynamické linkování

    -rpath se používá až při spouštění, takže když máte ./lib, bute to relativně k adresáři, ze kterého spouštíte; to asi nechcete... dejte tam absolutní cestu. Pro linker při linkování potřebujete -L./lib.

    Mrkněte na výstup "ldd binárka", potom taky RTFM ld.so, zvláště LD_DEBUG, RPATH a $ORIGIN.

    30.5.2009 09:47 l4m4
    Rozbalit Rozbalit vše Re: Dynamické linkování
    Než -rpath raději bych nastavil LD_RUN_PATH/LD_LIBRARY_PATH, což umožní knihovnu přesouvat.
    30.5.2009 09:42 l4m4
    Rozbalit Rozbalit vše Re: Dynamické linkování
    Verze knihovny určuje verzi implementovaného rozhraní knihovny (a je zakódována v binárce). Ta musí odpovídat, jinak se to neslinkuje, protože program vyžaduje rozhraní, které knihovna neimplementuje. Ve skutečnosti je to ovšem trochu složitější, pro podrobný popis viz

    http://sources.redhat.com/autobook/autobook/autobook_91.html

    Soubor libknihovna.so bez verze je pouze link na jednu z verzí, které máš nainstalovány -- typicky na tu poslední, což zařizuje ldconfig -- a používá se pouze v čase kompilace. Run-time se vždy hledá knihovna opovídající verze.

    Toto vše platí, pokud se bavíme o normálních knihovnách, ne o dlopen()ovaných modulech, kde se to většinou řeší jinak.

    Takže normální situace je

    Run-time soubory:

    libknihovna.so.4.0.2 -- vlastní knihovna

    libknihovna.so.4 -- link na libknihovna.so.4.0.2

    libknihovna.so.7.0.0 -- jiná verze knihovny, s jiným interface

    libknihovna.so.7 -- link na libknihovna.so.7.0.0

    Build-time soubory:

    libknihovna.so -- link na libknihovna.so.7 (resp. 7.0.0)
    30.5.2009 13:06 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Dynamické linkování
    Soubor libknihovna.so bez verze je pouze link na jednu z verzí, které máš nainstalovány -- typicky na tu poslední, což zařizuje ldconfig -- a používá se pouze v čase kompilace.

    Přesnější by bylo napsat při linkování (při kompilaci potřebujete jen hlavičkové soubory).

    30.5.2009 11:01 Dušan Renát | skóre: 4
    Rozbalit Rozbalit vše Re: Dynamické linkování
    Abych odpověděl tak nějak všem ... ano, rpath funguje až při spouštění, což je přesně to, co chci - chci to dynamicky slinkovat a pak tu dynamickou knihovnu přidat do podadresáře, aby se při překládání i spouštění odtud mohla použít. V praxi by to vypadalo spíš tak, že bych prohlásil, na kterých všech knihovnách to závisí, ať si je uživatel sežene ... na většině systémů to není žádný problém. Ale teď tenhle program odevzdávám jako zápočet a mám zadáno, že to má být balíček, který půjde sám o sobě přeložit - tj. už musí všechny dynamické knihovny obsahovat.

    Jaký je přesně problém v tom, když ten soubor dynamické knihovny zkopíruju do adresáře s programem, slinkuju to s tím a zadám rpath tak, aby se to při spouštění hledalo tam, kde jsem to nakopíroval (což JE relativně k aktuálnímu adresáři, NE absolutní cesta).

    Problém je v tom, že prohlásí, že nenachází soubor libSDL_gfx.so.4, a to i tehdy, když tam ten soubor je. Toto je problém a toto bych prosil, aby jste mi tu pomohli vyřešit. Ne navrhovat změny cest pro hledání knihoven ... což na systému, ke kterému nemám přístup, těžko udělám.
    30.5.2009 11:12 Dušan Renát | skóre: 4
    Rozbalit Rozbalit vše Re: Dynamické linkování
    Ještě se to pokusím vysvětlit líp a jednodušeji.

    Můj program potřebuje dynamickou knihovnu ke slinkování a spuštění. Na systému, kam to odevzdávám, ta knihovna není a nebude. Chci ji poskytnout se svým programem, v jednom z podadresářů, v přeložené podobě (.so), aby se na tom vzdáleném systému program mohl přeložit a spustit. Aby při překladu a spouštění byla na vzdáleném systému knihovna nalezena, používám -L a --rpath na ten podadresář, kam jsem knihovnu umístil. Knihovna není nalezena. Nevím proč.
    30.5.2009 11:14 Dušan Renát | skóre: 4
    Rozbalit Rozbalit vše Re: Dynamické linkování
    Ještě jedna oprava. Knihovna není nalezena PŘI SOUŠTĚNÍ. Při linkování ano. Předpokládám problém v tom parametru -rpath.
    30.5.2009 12:23 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
    Rozbalit Rozbalit vše Re: Dynamické linkování
    Možná jsem úplně mimo, ale pro linkování jsem taky volal GCC (ne přímo linker) a tuhle cestu jsem zadával parametrem -R. Něco jako (snad jsem zkopíroval tu správnou část):
    XLINKER=-Xlinker # or empty for Solaris
    ...
    $(CC) $(LDFLAGS) -o $@ -L. $(XLINKER) -R $(XLINKER) . $(OBJFILES)
    I am always ready to learn although I do not always like to be taught. (W. Churchill)
    1.6.2009 09:07 frr | skóre: 33
    Rozbalit Rozbalit vše Re: Dynamické linkování

    Proč to neslinkujete staticky?

    Jinak bych se trochu bál, že knihovna zkopírovaná jako hotový binární soubor bude mít další svoje vlastní "dependencies", které na cílovém systému mohou haprovat - ale konkrétně s SDL nemám v tomto směru zkušenosti...

    [:wq]

    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.