Portál AbcLinuxu, 10. května 2025 01:12
mkbundle
umí k aplikaci přibalit vybrané assembly nebo celé běhové prostředí Mono. Podrobnosti viz Running Mono Applications.
Žádná kompilace do C se neprovádí. Existuje však projekt CrossNet, který překládá IL kód do C++. Jako GC tam funguje klasický mark & sweep.
Leda že by výsledný kód volal nějaká systémová volání v tomto smyslu ale to se mi nezdá.Nerozumím, co tím myslíte. GC musí hlavně vědět, co jsou ukazatele, aby neuklízel objekty, které jsou přístupné.
[libor@fedora-notebook Debug]$ mkbundle ./pracovni_kalendar_aplikace.exe OS is: Linux Sources: 1 Auto-dependencies: False embedding: /home/libor/Projects/pracovni_kalendar/pracovni_kalendar_aplikace/bin/Debug/pracovni_kalendar_aplikace.exe Compiling: as -o temp.o temp.s cc -ggdb -o a.out -Wall temp.c `pkg-config --cflags --libs mono-2` temp.o Donevoláním jsem měl na mysli zda není v systému popř. přímo v jádře nějaká rutina podobná GC kterou by výsledný program pokud by byl v c volal.
mkbundle
vytvoří dva soubory temp.s
a temp.c
, ty pak přeloží a slinkuje. Soubor temp.s
obsahuje assembly – jejich data (pokud jste mkbundle
volal s volbou -z
, data každé assembly se napřed zkomprimují a teprve poté uloží do souboru temp.s
).
Soubor temp.c
obsahuje funkci main
, informace o jednotlivých assembly a externí pole s daty jednotlivých assembly. main
se postará o inicializaci běhového prostředí a načte assembly. Data jednotlivých assembly se nedávají přímo do souboru temp.c
, protože některé verze GCC mají problémy s velkými poli. Soubory temp.c
i temp.s
si můžete prohlédnout, když mkbundle
spustíte s volbou --keeptemp
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.