[linux] Otazka

jozo m jomasw na host.sk
Pátek Říjen 25 11:43:35 CEST 2002


Ahojte,

Mam zopar otazok okolo kopmilatorov g++/gcc :

Ked vytvorim nejaky program v C a prilinkujem k nemu skompilovany
zdrojak v NASM, kompilator gcc (gcc -O2 program.c asmprg.o) to
skompiluje v pohode, vznikne a.out. Ked sa pokusim skompilovat
program v g++ (g++ -O2 program.cpp asmprg.o), tak linker vyhodi
chybu. Preco ? Aky parameter mu musim dodat ?

Vytvorim nejaku funkciu napr :
int bigger(int a, int b)
{
  return (a>b) ? a : b;
};

a zavolam ju z hlavneho programu napr :
int x = bigger(5, 6);

Z gdb som zistil, ze ak zapnem max. optimalizaciu (parameter gcc -O2)
tak hlavny program preda funkcii parametre a, b pomocou zasobnika.
Borland C++ pri plnej optimalizacii tieto parametre preda pobmocou
registrov EAX a EDX. gcc alebo g++ toto nedokaze ? Pytam sa preto
lebo je to urcite spomalenie u casto sa vykonavajucich procedur
ziskavat parametre zo zasobnika a bohvie kolko optimalizacie je
v tomto pripade este vypnutej.

Ako vypnem (asi je to debug info) ? No proste skompilujem nejaky
program (napr wget) a pozrem jeho binarny obraz obsahuje nieco taketo :

2.96 20000731 (Linux-Mandrake 8.0)  GCC: (GNU) 2.96 20000731
(Linux-Mandrake
8.0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731 (Linux-Mandrake 8.0
2.96-0.48mdk)
GCC: (GNU) 2.96 20000731 (Linux-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU)
2.96 2000
0731 (Linux-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731
(Linux-Mandra
ke 8.0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731 (Linux-Mandrake 8.0
2.96-0.48md
k)  GCC: (GNU) 2.96 20000731 (Linux-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU)
2.
96 20000731 (Linux-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731
(Linux
-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731 (Linux-Mandrake 8.0
2.9
6-0.48mdk)  GCC: (GNU) 2.96 20000731 (Linux-Mandrake 8.0 2.96-0.48mdk)
GCC: (
GNU) 2.96 20000731 (Linux-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU) 2.96
20000731
 (Linux-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731
(Linux-Mandrake 8.
0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731 (Linux-Mandrake 8.0
2.96-0.48mdk)  GC
C: (GNU) 2.96 20000731 (Linux-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU) 2.96
200007
31 (Linux-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731
(Linux-Mandrake
8.0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731 (Linux-Mandrake 8.0
2.96-0.48mdk)  G
CC: (GNU) 2.96 20000731 (Linux-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU) 2.96
20000
731 (Linux-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731
(Linux-Mandrake
8.0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731 (Linux-Mandrake 8.0
2.96-0.48mdk)
GCC: (GNU) 2.96 20000731 (Linux-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU)
2.96 200
00731 (Linux-Mandrake 8.0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731
(Linux-Mandra
ke 8.0 2.96-0.48mdk)  GCC: (GNU) 2.96 20000731 (Linux-Mandrake 8.0
2.96-0.48mdk

Podla mna su to blbosti a vo vyslednom programe to nemusi byt (toto hadam
nenesie info o knizniciach s ktorymi to spolupracuje) takze ako toto
vypnem a
ako vypnem debug info ? Skusal som vsetko, nemoze byt tento kompilator
napevno
s podporou debug info ? Takto skompilovane programy omnoho prevysuju
velkostou
tie iste programy ktore su v RPM balikoch.

Diki vopred za odpoved.






Další informace o konferenci linux