[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