gcc -nostdlib a __errno_location

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Pátek Srpen 18 09:58:42 CEST 2000


On Fri, 18 Aug 2000, xmail listy wrote:

> Pri kompilaci meho C zdrojaku, ktery neobsahuje zadne GLIBC funkce
> pomoci gcc 2.7.2.3 s parametrem "-nostdlib" mi hlasi pri linkovani ze
> nemuze najit "__errno_location".
> Zjistil jsem ze je to zpusobeno "#iclude <errno.h>" - ovsem to ja
> potrebuju, protoze pouzivam volani jadra.

V tom pripade tam dejte "#include <linux/errno.h>" (stejne to nebude
portabilni, tak co).

> Jak je to s parametry predavanymi na prikazove radce (argc,argv) a co
> enviroment? Bude se mi pri spusteni spoustet jako prvni funkce main,
> nebo se spusti jeste neco pred ni?

V prvni rade se to do main vubec nedostane, protoze main je funkce volana
z jine funkce obsazene v /usr/lib/crt1.o (nebo gcrt1.o, kdyz tam pridate
profiling). Standardni linker script nastavuje vstupni adresu na symbol
_start. Kdybyste nepotreboval pristup k parametrum, tak byste mohl misto
main() napsat _start() (jenom se z teto funkce nesmite vratit, musite
zavolat _exit()). Jestli argv/envp chcete, pak bude nejlepsi, kdyz si
sam ve zdrojacich jadra a/nebo glibc najdete, jakym zpusobem se
predavaji. :) (Na prvni pohled to vypada, za na zasobniku je rada
ukazatelu na jednotlive parametry, pak nula, pak ukazatele na environment,
pak zase nula.)

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux