Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: GCC kääntäminen ja -g

TheSavageSam [22.06.2010 11:39:46]

#

Hei,
koetan opetella valgrindin käyttöä. Kaappasin netistä koodin ja käskettiin kääntää käyttäen -g operaattoria, jotta saadaan valgrindissa rivinumerot näkymään.
Kun ajan "gcc example1.c -g example1", niin tulee seuraavanlainen sillisalaatti:

example1: In function `_start':
/build/buildd/eglibc-2.10.1/csu/../sysdeps/x86_64/elf/start.S:65: multiple definition of `_start'
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crt1.o:/build/buildd/eglibc-2.10.1/csu/../sysdeps/x86_64/elf/start.S:65: first defined here
example1: In function `_fini':
(.fini+0x0): multiple definition of `_fini'
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crti.o:(.fini+0x0): first defined here
example1:(.rodata+0x0): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crt1.o:(.rodata.cst4+0x0): first defined here
example1: In function `__data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crt1.o:(.data+0x0): first defined here
example1: In function `__data_start':
(.data+0x8): multiple definition of `__dso_handle'
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/crtbegin.o:(.data+0x0): first defined here
example1: In function `main':
(.text+0xe4): multiple definition of `main'
/tmp/ccawQVUm.o:/home/code/valgrind/test/example1.c:3: first defined here
example1: In function `_init':
(.init+0x0): multiple definition of `_init'
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/../../../../lib/crti.o:(.init+0x0): first defined here
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/crtend.o:(.dtors+0x0): multiple definition of `__DTOR_END__'
example1:(.dtors+0x8): first defined here
/usr/bin/ld: error in example1(.eh_frame); no .eh_frame_hdr table will be created.
collect2: ld returned 1 exit status

Missä vika? Käytän Ubuntu linux 9.04.
Koodi, jota koetan kääntää:

#include <stdlib.h>
int main()
{
    char *x = malloc(100); /* or, in C++, "char *x = new char[100] */
    return 0;
}

Metabolix [22.06.2010 11:53:54]

#

Nyt sekä example1.c että example1 tulkitaan lähdetiedostoiksi, jolloin GCC yrittää linkittää ne yhteen eikä homma tietenkään toimi. Jos haluat määritellä kohdetiedoston, käytä -o:ta. Oikea komento olisi siis seuraava:

gcc example1.c -g -o example1

TheSavageSam [22.06.2010 12:57:03]

#

Metabolix kirjoitti:

Nyt sekä example1.c että example1 tulkitaan lähdetiedostoiksi, jolloin GCC yrittää linkittää ne yhteen eikä homma tietenkään toimi. Jos haluat määritellä kohdetiedoston, käytä -o:ta. Oikea komento olisi siis seuraava:

gcc example1.c -g -o example1

Miksei seuraava toimi?

gcc example1.c -o -g example1

Jokotai [22.06.2010 12:59:21]

#

TheSavageSam kirjoitti:

Miksei seuraava toimi?

gcc example1.c -o -g example1

-o :n jälkeen luetaan parametrina tiedoston nimi. Sen sijaan

gcc example1.c -o example1 -g

saattaisi toimia.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta