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 17:11 | Nová verze Fluttershy, yay! | Komentářů: 0
včera 10:33 | Nová verze

Mozilla.cz informuje o aktualizovaném českém slovníku pro kontrolu pravopisu pro Firefox, Thunderbird i SeaMonkey. K dispozici je na na serverech s doplňky (Firefox, Thunderbird, SeaMonkey).

Ladislav Hagara | Komentářů: 0
včera 10:11 | Nová verze

Byla vydána verze 0.52.1 open source počítačové hry Unvanquished (Wikipedie). Nově lze instalovat také z Flathubu. Unvanquished je fork počítačové hry Tremulous.

Ladislav Hagara | Komentářů: 0
včera 00:11 | Zajímavý projekt

Watchy jsou open source hodinky postaveny na ESP32-PICO-D4 s e-papírovým displejem s rozlišením 200x200 pixelů, s Wi-Fi a Bluetooth LE. Předobjednat je lze na Crowd Supply za 59 dolarů.

Ladislav Hagara | Komentářů: 1
20.6. 22:11 | Nová verze

OASIS oznamuje zveřejnění nejnovějšího standardu OASIS, který byl schválen členy 27. dubna 2021: Open Document Format for Office Applications (OpenDocument) Version 1.3. Formát OpenDocument je volně dostupný otevřený formát souborů dokumentů založený na XML pro kancelářské aplikace, který se používá pro dokumenty obsahující text, tabulky, grafy a grafické prvky. OpenDocument Format v1.3 je aktualizací mezinárodní normy verze 1.2

… více »
Zdeněk Crhonek | Komentářů: 4
19.6. 20:11 | Nová verze

Byl vydán Debian 10.10, tj. desátá opravná verze Debianu 10 s kódovým názvem Buster. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 10 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.

Ladislav Hagara | Komentářů: 34
19.6. 16:33 | Nová verze

Tým pro zajištění kvality LibreOffice (QA) oznamuje, že LibreOffice 7.2 Beta1 je k dispozici k testování! LibreOffice 7.2 bude vydán jako finální verze v polovině srpna 2021, přičemž LibreOffice 7.2 Beta1 je druhou předběžnou verzí od zahájení vývoje verze 7.2 na konci listopadu 2020. Od předchozí verze LibreOffice 7.2 Alpha1 bylo do úložiště kódu odesláno 1163 revizí a opraveno 221 problémů. Podívejte se do poznámek k vydání, kde najdete nové funkce obsažené v této verzi LibreOffice.

Zdeněk Crhonek | Komentářů: 0
19.6. 00:33 | Zajímavý projekt

Rodina open source vstupních zařízení Ploopy se rozrostla o Ploopy Mini Trackball. Stavebnici lze předobjednat za 69,99 CAD (1 210 CZK).

Ladislav Hagara | Komentářů: 0
18.6. 15:44 | Nová verze

Byla vydána beta verze Linux Mintu 20.2 s kódovým jménem Uma. Na blogu Linux Mintu jsou hned tři oznámení. První o vydání Linux Mintu s prostředím Cinnamon, druhé o vydání Linux Mintu s prostředím MATE a třetí o vydání Linux Mintu s prostředím Xfce. Stejným způsobem jsou rozděleny také poznámky k vydání (Cinnamon, MATE, Xfce) a přehled novinek s náhledy (Cinnamon, MATE, Xfce). Linux Mint 20.2 bude podporován až do roku 2025.

Ladislav Hagara | Komentářů: 0
18.6. 08:00 | Nová verze

Byla vydána verze 1.53.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ářů: 2
Používáte kalkulačku?
 (10%)
 (32%)
 (62%)
 (26%)
 (12%)
Celkem 251 hlasů
 Komentářů: 25, poslední 18.6. 07:59
Rozcestník

Dotaz: libc.so a stat()

18.5. 09:05 rastos | skóre: 62 | blog: rastos
libc.so a stat()
Přečteno: 432×
Napísal som si knižnicu v jazyku C. Skompiloval na stroji A a preniesol na iný stroj B a tam mi nezafunguje pretože na A je libc-2.33.so, ktorá funkciu stat() definuje ako "weak symbol" a na stroji B je libc-2.30.so, ktorá stat() nedefinuje vôbec. Kompilovanie tej istej knižnice na B vyrobí binárku, ktorá má stat() v sebe - teda tá funkcia bola prilinkovaná staticky. Ak tomu dobre rozumiem, tak bola zobraná zo statickej verzie libc.

Dá sa na stroji A nejako (linkeru?) povedať nech vyrobí binárku, ktorá bude fungovať na rôznych strojoch bez ohľadu na "drobné rozdiely" vo verzii libc?

Řešení dotazu:


Odpovědi

18.5. 10:16 X
Rozbalit Rozbalit vše Re: libc.so a stat()
Nestacilo by to staticky nalinkovat pomoci:
-static
?
18.5. 11:07 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: libc.so a stat()
Myslíš takto?
$ cat stat.c 
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

void fnc(const char *filename)
{
        struct stat st;
        stat(filename,&st);
}
$ gcc -fPIC -shared -o libStat.so stat.c -static -lc
$ nm -D libStat.so |grep -w stat
                 U stat
Asi nestačilo.
18.5. 22:54 OldFrog {Ondra Nemecek} | skóre: 35 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: libc.so a stat()
Volby -shared a -static se podle mě vylučují a specifikují výsledný produkt, nikoli způsob linkování závislostí.

Potřebujete linkovat s libc.a (nikoli libc.so), tedy něco jako:

gcc -o libtest.so test.c crt1.o libc.a -lm -lc -lgcc

Netestováno.
-- OldFrog
19.5. 10:42 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: libc.so a stat()
man ld

-static
Do not link against shared libraries. ... You may use this option multiple times on the command line: it affects library searching for -l options which follow it.

-shared
Create a shared library.

19.5. 21:06 OldFrog {Ondra Nemecek} | skóre: 35 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: libc.so a stat()
Tak to se omlouvám za mystifikaci.
-- OldFrog
19.5. 19:31 debian+ | skóre: 24 | blog: analyzy
Rozbalit Rozbalit vše Re: libc.so a stat()
-U znaci, ze je dynamicky.
debian.plus@protonmail.com
19.5. 20:45 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: libc.so a stat()
No veď áno. To je práve ten problém.

Na stroji A dynamický linker loadne moju knižnicu, zistí, že symbol "stat" v binárke mojej knižnice je (U)ndefined, hľadá ho a nájde ho v libc.so.

Keď takú binárku prenesiem na stroj B, kde libc.so neposkytuje symbol "stat", tak tam tá knižnica nefunguje lebo dynamický linker loadne moju knižnicu zistí, že symbol "stat" je v binárke mojej knižnice (U)ndefined, hľadá ho a nikde ho nenájde.

Keď na stroji B skompilujem tie isté zdrojáky, tak symbol "stat" je priamo v mojej knižnici ako (t)text - teda ḱód tej funkcie je priamo v binárke mojej knižnice.
$ nm  libStat.so |grep -w stat
00000000000082e0 t stat
Domnievam sa, že by malo byť možné na stroji A prinútiť linker vyrobiť tiež binárku, ktorá obsahuje (t)ext funkcie stat(). Taká binárka by potom fungovala na oboch systémoch. Otázka je: ako to tomu linkeru na stroji A povedať?
Řešení 1× (debian+)
19.5. 21:39 debian+ | skóre: 24 | blog: analyzy
Rozbalit Rozbalit vše Re: libc.so a stat()
Mám o preklade napísaný nový svoj blog.
debian.plus@protonmail.com
18.5. 18:17 debian+ | skóre: 24 | blog: analyzy
Rozbalit Rozbalit vše Re: libc.so a stat()
Pozor pri statickom linkovani na licenciu/licencie. Glibc byva dost velka, najdi si aj ine c-library implementacie.
debian.plus@protonmail.com
19.5. 19:34 debian+ | skóre: 24 | blog: analyzy
Rozbalit Rozbalit vše Re: libc.so a stat()
https://wiki.debian.org/musl

A nezabudni na licenciu c musl knižnice pridať ku svojmu programu, ked staticky linkuješ tu c knižnicu.
debian.plus@protonmail.com

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.