[linux] Linkovanie voci vlastnej kniznici
marian Krivos
nezmar na internet.alcatel.sk
Úterý Listopad 6 12:28:08 CET 2001
Situejsn je probably takovato:
C a C++ pouzivaju odlisne konvencie pri pomenovani objektov, inak
by C++ nemohlo napr. pretazovat funkcie. Na zaciatok majme maly
priklad test.c plus vygenerovany kod pre rozne pripady :
int foobar(int, char, double)
{
}
zatial co gcc pomenuje funkciu klasicku "foobar", g++ aplikuje
namemangling s vysledkom "foobar__Ficd". Lahko tam rozpoznate
zakodovane typy parametrov funkcie. Taky isty vysledok by dal aj
prikaz gcc keby sme suboru zmenili koncovku na .cpp. Pokial chces
pouzivat v cpp moduloch funkcie a objekty z C modulu. Musis ich
deklarovat ako extern "C".
MK
-----------------------------------------------------------------------------------------
gcc test.c -S -O
.file "test.c"
.version "01.01"
gcc2_compiled.:
.text
.align 4
.globl foobar
.type foobar, na function
foobar:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.Lfe1:
.size foobar,.Lfe1-foobar
.ident "GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)"
g++ test.c -S -O
.file "test.c"
.version "01.01"
gcc2_compiled.:
.text
.align 4
.globl foobar__Ficd
.type foobar__Ficd, na function
foobar__Ficd:
.LFB1:
pushl %ebp
.LCFI0:
movl %esp, %ebp
.LCFI1:
popl %ebp
ret
.LFE1:
.Lfe1:
.size foobar__Ficd,.Lfe1-foobar__Ficd
.ident "GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)"
gcc test.c -S -O a pridany riadok deklaracie:
extern "C"int foobar(int, char, double)
file "test.c"
.version "01.01"
gcc2_compiled.:
.text
.align 4
.globl foobar
.type foobar, na function
foobar:
.LFB1:
pushl %ebp
.LCFI0:
movl %esp, %ebp
.LCFI1:
popl %ebp
ret
.LFE1:
.Lfe1:
.size foobar,.Lfe1-foobar
.ident "GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)"
Další informace o konferenci linux