Jack Dorsey představil (𝕏, Nostr) svůj nový projekt bitchat. Jedná se o bezpečnou decentralizovanou peer-to-peer aplikaci pro zasílání zpráv bez potřeby internetu, serverů a telefonních čísel. Využívá se Bluetooth Mesh Network. Detaily v technické dokumentaci. Zdrojové kódy jsou k dispozici pod licencí Unlicense.
Hudební přehrávač Amarok byl vydán v nové verzi 3.3 "Far Above the Clouds". Nově je postaven na Qt6/KF6 a využívá GStreamer místo Phononu.
Společnost IBM představila novou generaci svých serverů: IBM Power11.
Multiplatformní digitální pracovní stanice pro práci s audiem Ardour byla postavena na GTK2. Vývojáři neplánovali její portaci na GTK3 nebo GTK4. Naopak, v lednu loňského roku si vytvořili vlastní fork GTK2 s názvem YTK. Ten v únoru letošního roku přestal být volitelným a nově byla zcela odstraněna podpora GTK2.
Byla vydána nová verze 6.4 linuxové distribuce Parrot OS (Wikipedie). Jedná se o linuxovou distribuci založenou na Debianu a zaměřenou na penetrační testování, digitální forenzní analýzu, reverzní inženýrství, hacking, anonymitu nebo kryptografii. Přehled novinek v příspěvku na blogu.
Společnost initMAX pořádá sérii bezplatných webinářů věnovaných novému Zabbixu 7.4. Podrobnosti a registrace na webu initMAX.
… více »Byla vydána verze 7.0 open source platformy pro správu vlastního cloudu OpenNebula (Wikipedie). Kódový název nové verze je Phoenix. Přehled novinek v poznámkách k vydání v aktualizované dokumentaci.
E-mailový klient Thunderbird byl vydán ve verzi 140.0 ESR „Eclipse“. Jde o vydání s dlouhodobou podporou, shrnující novinky v upozorněních, vzhledu, správě složek a správě účtů. Pozor, nezaměňovat s průběžným vydáním 140.0, které bylo dostupné o týden dříve.
Organizace Video Games Europe reprezentující vydavatele počítačových her publikovala prohlášení k občanské iniciativě Stop Destroying Videogames.
Společnost Raspberry Pi nově nabzí Raspberry Pi Camera Module 3 Sensor Assembly, tj. samostatné senzorové moduly z Raspberry Pi Camera Module 3.
Tento text vznikl díky dotazům lidí, kteří si neradi čtou {man,info} gcc
. Trochu nepochopitelně nenese žádné prohlášení a ani nechce vyvolávat flame, za což se omlouvám .
Gcc podporuje mnoho způsobů optimalizace kódu:
-O (-O1) - Optimize
.
A zároveň na strojích bez debugovacího rozhraní (x86?) zapíná
-O2 - Optimize even more
-O3 - Optimize yet more
-Os - Optimize for size
. Tento zapne -O2
, ale vypne -falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks -fprefetch-loop-arrays
.
Co znamenají konkrétní -ffoo
si laskavý čtenář jistě už přečte sám .
Knihovny rozlišujeme na statické a sdílené. Zatímco se ty první natvrdo
slinkují s binárkou v době kopilace, ty druhé jsou uloženy na disku a linkují se až za běhu. Mějme následující kód:
$ cat hello.{h,c} #include <stdio.h> #ifndef __HELLO__ #define __HELLO__ void helloWorld(void); #endif #include "hello.h" void helloWorld(void) { printf("Hello, world!\n"); }
Zdrojový kód přeložíme na objektový a ten zabalíme do statické knihovny. Název statické knihovny musí začínat na lib a končit na .a!
$ gcc -c hello.c -o hello.o $ ar rcs libhello.a hello.o
Pro sdílenou knihovnu se objektový kód kompiluje s parametrem -fPIC
. Jenom upozorňuji, že parametr -Wl
se jmenuje dvojité vé el
. Sdílená knihovna musí opět začínat lib a končit .so.verze_knihovny.
$ gcc -fPIC -c hello.c -o hello.o $ gcc -shared -Wl,-soname,libhello.so.1 -o libhello.so.1.0.1 hello.o
Kód z knihoven se používá naprosto stejně, jako kterýkoliv jiný. Vzhledem k tomu, že naše knihovna není na místě, kde je linker standardně hledá, musíme mu parametrem -L.
sdělit, že má hledat i v aktuálním adresáři.
$ cat main.c #include "hello.h" int main(void) { helloWorld(); return 0; } $ gcc -static main.c -L. -lhello -o main.s $ gcc main.c -L. -lhello -o main.d $ ls -lh main.{s,d} | awk '{print $9, $5}' main.d 7,1K main.s 491K
Starším (a méně bezpečným způsobem) je proměnná LD_LIBRARY_PATH
. Méně bezpečným proto, že umožňuje zaměnit sdílené knihovny suid programům.
Jak mě upozornil ivok, tak se tento problém už netýká novějších verzí ld-linux.so
(z glibc6). Díky!
Modernější systémy používají nástroj ldconfig
, který čte soubor /etc/ld.so.conf
a potřebné informace si nahrává do cache /etc/ld.so.cache
. Ldconfig a /etc/ld.so.conf
může editovat používat pouze root.
Ukázka mého /etc/ld.so.conf
z Gentoo
# ld.so.conf autogenerated by env-update; make all changes to # contents of /etc/env.d directory /usr/local/lib /usr/lib/opengl/xorg-x11/lib /usr/i686-pc-linux-gnu/lib /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6 /usr/lib/mozilla-firefox /usr/lib /opt/sun-jre-bin-1.5.0.05/lib/i386/ /opt/sun-jre-bin-1.5.0.05/lib/i386/native_threads/ /opt/sun-jre-bin-1.5.0.05/lib/i386/xawt/ /opt/sun-jre-bin-1.5.0.05/lib/i386/server/ /usr/qt/3/lib /usr/kde/3.4/lib /usr/games/lib /usr/lib/fltk-1.1
Tiskni
Sdílej:
$ export LD_PRELOAD=libfake $ ping ERROR: ld.so: object 'libdoesntexit' from LD_PRELOAD cannot be preloaded: ignored. $ export LD_PRELOAD=/usr/lib/hacklocaledir.so $ strace ping ... open("/usr/lib/hacklocaledir.so", O_RDONLY) = 3 ... $ stat -c %A /bin/ping -rws--x--xTakže tam ta chyba pořád je, nebo mám něco špatně v konfiguraci