Error al compilar (posiblemente incluyendo más de una vez una función)

Estoy haciendo un proyecto para la escuela, así que necesito compilarlo con:

gcc hide.c stegano.c -o hide -ansi -pedantic -Wall -Werror

Pero luego me sale este error:

/tmp/ccDME1jC.o: In function `calculate_n':
stegano.c:(.text+0x0): multiple definition of `calculate_n'
/tmp/ccQxPZJu.o:hide.c:(.text+0x0): first defined here
/tmp/ccDME1jC.o: In function `tam_msg':
stegano.c:(.text+0x87): multiple definition of `tam_msg'
/tmp/ccQxPZJu.o:hide.c:(.text+0x87): first defined here
/tmp/ccDME1jC.o: In function `insere_msg':
stegano.c:(.text+0xe1): multiple definition of `insere_msg'
/tmp/ccQxPZJu.o:hide.c:(.text+0xe1): first defined here
/tmp/ccDME1jC.o: In function `copia':
stegano.c:(.text+0x201): multiple definition of `copia'
/tmp/ccQxPZJu.o:hide.c:(.text+0x201): first defined here
/tmp/ccDME1jC.o: In function `esconde_msg':
stegano.c:(.text+0x274): multiple definition of `esconde_msg'
/tmp/ccQxPZJu.o:hide.c:(.text+0x274): first defined here
collect2: ld returned 1 exit status

El código del programa es así, creo que el error probablemente esté en la inclusión, así que oculté el código real:

El programa hide.c es así:

#include <stdio.h>
#include <stdlib.h>
#include "stegano.c"
//code//

Luego llama a stegano.c, que contiene todas las funciones reales utilizadas en hide.c:

#include <stdio.h>
#include <stdlib.h>
#include "stegano.h"
//code//

Y el archivo de cabecera stegano.h:

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

typedef unsigned char Byte;

void calculate_n(char name[MAX], int* n, int* x);
int tam_msg(char name[MAX]);
void insere_msg(int size, char name[MAX], Byte* v);
void copia(Byte* v1, Byte *v2, int size);
void esconde_msg(Byte* msg, char name1[MAX], char name2[MAX]);

¡Gracias por ayudar!

preguntado el 01 de julio de 12 a las 10:07

2 Respuestas

Causado por esto:

#include "stegano.c"

esto extraerá todas las definiciones de función en stegano.c dentro hide.c. lo que significa el stegano.c y hide.c ahora define las mismas funciones. Esto producirá la definición múltiple errores que ve cuando intenta (compilar y) vincular.

Incluya el archivo de encabezado en su lugar:

#include "stegano.h"

Respondido 01 Jul 12, 10:07

Necesitas quitar el #include "stegano.c". Incluir la stegano.h archivo en su lugar.

Al incluir el .c básicamente intenta compilar el código de ese archivo dos veces (una vez al incluirlo y otra al compilar el archivo directamente) y, por lo tanto, ambos stegano.o y hide.o contendrá las mismas funciones que se romperán en la fase de vinculación.

Respondido 01 Jul 12, 10:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.