Byla vydána nová verze 7.2 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Tor Browser byl povýšen na verzi 15.0.1. Další novinky v příslušném seznamu.
Česká národní banka (ČNB) nakoupila digitální aktiva založená na blockchainu za milion dolarů (20,9 milionu korun). Na vytvořeném testovacím portfoliu, jehož součástí jsou bitcoin, stablecoiny navázané na dolar a tokenizované depozitum, chce získat praktickou zkušenost s držením digitálních aktiv. Portfolio nebude součástí devizových rezerv, uvedla dnes ČNB v tiskové zprávě.
Apple představil iPhone Pocket pro stylové přenášení iPhonu. iPhone Pocket vzešel ze spolupráce značky ISSEY MIYAKE a Applu a jeho tělo tvoří jednolitý 3D úplet, který uschová všechny modely iPhonu. iPhone Pocket s krátkým popruhem se prodává za 149,95 dolarů (USA) a s dlouhým popruhem za 229,95 dolarů (USA).
Byla vydána nová stabilní verze 7.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 142. Přehled novinek i s náhledy v příspěvku na blogu.
Společnost Epic Games vydala verzi 5.7 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Podrobný přehled novinek v poznámkách k vydání.
Intel vydal 30 upozornění na bezpečnostní chyby ve svých produktech. Současně vydal verzi 20251111 mikrokódů pro své procesory.
Byla vydána říjnová aktualizace aneb nová verze 1.106 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.106 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Canonical pro své zákazníky, předplatitele Ubuntu Pro, prodloužil podporu Ubuntu LTS z 12 let na 15 let (Legacy add-on). Týká se verzí od 14.04 (Trusty Tahr).
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 5.0.0. Nově je oficiálně podporován Linux ARM64/AArch64. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byla vydána verze 10 dnes již multiplatformního open source frameworku .NET (Wikipedie). Přehled novinek v příspěvku na blogu Microsoftu. Další informace v poznámkách k vydání na GitHubu nebo v přednáškách na právě probíhající konferenci .NET Conf 2025.
/**
* @file kontrolni.c
*/
void hello(void) {
printf("Hello, library world.\n");
}
Tu si prelozim a nahraju jako dynamicky sdilenou knihovnu kontrolni.so:
gcc -Wall -fPIC -c kontrolni.c gcc -shared -Wl,-soname,kontrolni.so.0 -o kontrolni.so.0.0.1 kontrolni.oNo a dle nekolika manualu jsem se znazil tu mou fci hello z knihovny kontrolni.so zavolat:
typedef void* (*arbitrary)(); arbitrary my_function; void* handle = dlopen(0,RTLD_NOW|RTLD_GLOBAL); *(void**)(&my_function) = dlsym(handle,"hello"); my_function(); dlclose(handle);Nasel jsem si i manual, kde se vola fce takto:
void *handle;
int *iptr, (*fptr)(int);
/* open the needed object */
handle = dlopen("/usr/home/me/libfoo.so", RTLD_LOCAL | RTLD_LAZY);
/* find the address of function and data objects */
*(void **)(&fptr) = dlsym(handle, "my_function");
iptr = (int *)dlsym(handle, "my_object");
/* invoke function, passing value of integer as a parameter */
(*fptr)(*iptr);
Jenomze jsem se jeste nedocet, co by mely byt ty data objects. POstradam nejaky konkretni priklad.
Mohl by mi nekdo ukazat svetlo v tunelu a navest me? :) Fakt nevim, co delam spatne.
Řešení dotazu:
#include <kontrolni.h>
int
main(void)
{
hello();
return 0;
}
kde v kontrolni.h je příslušná deklarace hello a pak
gcc -o program program.o -lkontrolni
Pokud chceš napoak otevřít knihovnu až za běhu pomocí dlopen(), tak první argument je jméno souboru s knihovnou, tedy "/cesta/někam/kontrolni.so". NULL znamená otevřít tímto způsobem sám program, aby mohl hledat symboly sám v sobě (což má smysl pouze při linkování s --export-dynamic); 0 je totéž co NULL + zblbost C++...
Konvence pojmenování je
(a) Dynamická knihovna s verzovaným interface: libfoo.so.1.2.3, kde čísla definují verze interface, viz sekci Versioning v dokumentaci libtoolu.
(b) Dynamická knihovna, kde se na verzování interface nehraje, protože není kompatibilní s předchozími ani následujícími: libfoo-1.2.3.so, kde 1.2.3 je prostě verze.
(c) Dynamický modul pro dlopen()ování: foo.so, bez lib a bez verzí (případné verzování se tady řeší až něčím, co se po otevření modulu najde uvnitř).
Důvod prefixu lib v (a) a (b) je, že ho linker zase odstraňuje, tj. -lfoo hledá libfoo; taky ti v tom případě něco musí udělat ten smylink z libfoo.so.0 na libfoo.so.0.0.0 (normálně ldconfig) a ta knihovna musí být v LD_LIBRARY_PATH nebo musíš použít -rpath (což ostatně platí i pro dlopenování, i když tam se spíš používá plná cesta, případně můžeš napsat "./kontrolni.so" pro aktuální adresář). Název kontrolni.so.0.0.0 do toho nezapadá a opět těžko říci, o kterou z tech tří věci se snažíš.
Konečně, ta deklarace arbitrary je blbě, pokud funkce vrací void, protože ji máš deklarovánu jako funkci vracející ukazatel (navíc nemá deklarovány argumenty), a program neřeší kontrolu chyb, ani nepíšeš, co vlastně nefunguje, takže těžko říci. Mi to po opravení chyb a upravení na případ (c) normálně funguje.
void (*my_function)(void); //PRoc takovato deklarace? Potoze fce hello je deklarovana jako void hello(void)
void* handle = dlopen("/home/.../.../Vyvoj_C/libkontrolni.so", RTLD_NOW); //misto tri tecek je cesta k souboru
if(handle==NULL) {
fputs (dlerror(), stderr);
exit(1);
}
my_function = dlsym(handle,"hello");
if(my_function==NULL) {
fputs(error, stderr);
exit(1);
}
my_function();
dlclose(handle);
Diky osetreni chb mi ted pocitac nadava, ze ta knihovna vubec neexistuje:
Vyvoj_C/kontrolni.so: cannot open shared object file: No such file or directoryPokud ovsem prepisu volani dlopen na:
dlopen(".../Vyvoj_C/libkontrolni.so.0.0.1", RTLD_NOW)
Tak se mi ta ma fce zavola a Hello, world, se vytiskne... Funguje tedy pripad (a), ale ne pripad (c). Mohl bys mi jeste osvetlit proc? Zajimalo by me, co mi uniklo, co jsem nepochopil. Diky.
NAME=pokusny CC=gcc CFLAGS=-ldl -std=c99 -pedantic -Wall -Wextra -D_GNU_SOURCE #kompilace programu $(NAME): main.c $(CC) $(CFLAGS) main.c -o $(NAME) pokusne.o: pokusne.c $(CC) $(CFLAGS) convertions.c -c #kompilace sdilene knihovny convert.o : convert.c $(CC) -Wall -fPIC -c kontrolni.c convert.o : convert.c $(CC) -shared -Wl,-soname,kontrolni.so.0 -o libkontrolni.so.0.0.1 kontrolni.oPriznam se, ze to s Makefile moc neumim. Nic jsem poradne k psani makefile pro shared libaries nevygooglil. Vyse zmineny Makefile mi udela binarku s programem, ale knihovnu nevytvori. V prikazove radce mi to ale pekne tu knihovnu vytvori:
gcc -Wall -fPIC -c pokusny.c gcc -shared -Wl,-soname,kontrolni.so.0 -o libconvert.so.0.0.1 convert.o
make -C subprojekt) a na začátku all, které závisí na všem. Pokud používáš git, lehce se pak dají použít jeho submoduly. Stejně pak můžeš přibalit testy, dokumentaci, další nástroje,...
my_function = dlsym(handle, "hello");a mělo by to být v pohodě. Rozhodně však přidej kontrolu, zda se
dlopen a dlsym povedly, neboť se aspoň dozvíš, co je špatně.
Jinak to vypadá celkem v pořádku. Tedy za předpokladu, že v době kompilace nevíš, zda tu knihovnu opravdu potřebuješ (volitelná součást/výběr dle architektury) nebo v případě, že se jedná o nějaký plugin.
Tiskni
Sdílej: