[linux] Otazka

Marek Kilimajer kilimajer na webglobe.sk
Pátek Říjen 25 14:34:22 CEST 2002


Nie som odbornik, ale skusim odpovedat

jozo m wrote:

>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);
>
c++ umoznuje pretazenie funkcii, ale aby bolo mozne rozoznat, ktoru 
verziu pouzit, pri
kompilacii sa premenuju podla parametrov, ktore prijimaju, takze g++ 
hlada v skutocnosti
funkciu bigger_ii (priklad), kde posledne pismena znamenaju integer, 
integer.
Riesi sa to myslim pomocou
#ifdef __cplusplus
extern "C" {
#endif
... telo sem
#ifdef __cplusplus
}
#endif

v hlavickovom subore

>
>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.
>
neviem, skus pozriet optimization options v man gcc

>
>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
>  
>
toto by mal odstranit strip

>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.
>
>
>
>_______________________________________________
>http://lists.linux.sk/listinfo/linux
>http://search.lists.linux.sk
>
>  
>





Další informace o konferenci linux