Mam takiego problema. (DJGPP)
Pisze sobie OS-a (fasm) i on tam sobie udaje, że działa.
Ale zachciało mi się pisać do niego programiki w c i c++.
Jak mam programik w pure C to jest ok i działa!
Niestety gdy pojawi się tam obiekt lub struktura to linker krzyczy:
programik kompilowany jest do formatu binary.
Nie pomogło użycie g++ itp.
nie uzylem makefile tylko *.bat-a
wygląda tak:
gxx -x c++ main.cpp -O2 -fomit-frame-pointer -c -o main.o
gxx -x c++ rys.cpp -O2 -fomit-frame-pointer -c -o rys.o
ld -Tprg3.ld -o prg3.bin main.o rys.o
A plik prg3.ld wygląda tak:
OUTPUT_FORMAT("binary")
ENTRY("_main")
pliki main.o i rys.o powstały
ale linker się zbuntował
Co prawda udało się to skompilować w ten sposób:
gxx main.cpp -fomit-frame-pointer -c -o prg3.bin
Ale ten programik był bardzo rozbiegany po pamięci
Mój OSesek dla procesów organizuje pamięć tak:
0-0xC0000000 - przestrzen adresowa dla procesu
0xBFFFE000 (i w dół) - stos
powyżej 0xC0000000 (3GiB), kod systemu
A ten programik, skompilowany metodą 2-gą próbuje, i to na samym początku odwołać sie
pod adres powyżej 3GiB...