Il modo più semplice per è compilare il codice C di opporsi file (gcc -c
per ottenere alcuni *.o
file) e quindi collegare direttamente con il linker (ld
). Dovrai collegare i tuoi file oggetto con alcuni file oggetto aggiuntivi come /usr/lib/crt1.o
per ottenere un file eseguibile funzionante (tra il punto di ingresso, come visto dal kernel, e la funzione main()
, c'è un po 'di lavoro da fare) . Per sapere con cosa collegare, prova a collegarti con glibc, usando gcc -v
: questo dovrebbe mostrarti cosa succede normalmente nell'eseguibile.
Troverete che gcc genera codice che può avere alcune dipendenze da alcune funzioni nascoste. La maggior parte di questi sono in libgcc.a
. Potrebbero esserci anche chiamate nascoste a memcpy()
, memmove()
, memset()
e, che si trovano nella libc, quindi potrebbe essere necessario fornire le proprie versioni (che non è difficile, almeno finché non si è troppo esigenti per le prestazioni).
Le cose possono risultare più chiare a volte se si guarda l'assemblaggio prodotto (utilizzare il flag -S
).
fonte
2010-03-30 20:44:45
'-nostdlib' dovrebbe farlo, quale versione della piattaforma/compilatore stai usando? –
"non aiuta" dato che in questo non è stata disabilitata la libreria, oppure non è stato possibile compilare nulla con quella bandiera? –
Probabilmente vorrai anche -nostartuperare file. –