When I try to make a .bin file it gives a multiple-definition error in all functions

0

Linux I use the following command lines to run all the files:

gcc -c aluno.c // gera o arquivo objeto com extensão .o de mesmo nome
gcc -c teste.c
gcc -o prog.bin teste.o aluno.o //para criar o arquivo prog.bin com a junção dos arquivos aluno e teste

After I run these command lines, the multiple-definition error appears (I put the error image at the end of the question)

Student file.h:

/* TAD: Aluno (matricula, nome, curso) */
typedef struct aluno Aluno;

/* Aloca e retorna um aluno com os dados passados por parâmetro */
Aluno *novo(int matricula, char *nome, char *curso);

/* Libera a memória de um aluno previamente criado */
void libera(Aluno *aluno);

/* Copia os valores de um aluno para as referências informadas */
void acessa(Aluno *aluno, int *matricula, char *nome, char *curso);

/* Atribui novos valores aos campos de um aluno */
void atribui(Aluno *aluno, int matricula, char *nome, char *curso);

/* Retorna o tamanho em bytes do TAD aluno */
int size(); 

Student file c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "aluno.h"

typedef struct aluno{
    int matricula;
    char nome[50];
    char curso[20];
}Aluno;

Aluno *novo(int matricula, char *nome, char *curso){
    Aluno *a;
    a=malloc(sizeof(Aluno));
    a->matricula=matricula;
    strcpy(a->nome,nome);
    strcpy(a->curso,curso);

}

void libera(Aluno *aluno){
    free(aluno);
}

void acessa(Aluno *aluno, int *matricula, char *nome, char *curso){
    matricula=(int*)&aluno->matricula;
    nome=(char*)&aluno->nome;
    curso=(char*)&aluno->curso;
}

void atribui(Aluno *aluno, int matricula, char *nome, char *curso){
    aluno->matricula=matricula;
    strcpy(aluno->nome,nome);
    strcpy(aluno->curso,curso);
}

int size(){
    return (int)sizeof(Aluno);
}

Test.c file:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "aluno.h"
#include "aluno.c"


int main(){
    Aluno *a;
    a=malloc(sizeof(size()));
    a=novo(123,"victhor","computacao");

    int *matricula;
    char *nome, *curso;

    acessa(a,matricula,nome,curso);

    printf("Matrícula: %d\n",*matricula);
    printf("Nome: %s\n", nome);
    printf("Curso: %s\n", curso);
    return 0;
}

    
asked by anonymous 04.11.2016 / 21:22

1 answer

1

First, your aluno.h file, because it is a header file, is good practice to use macros to prevent the file being imported multiple times to the project.

#ifndef ARQUIVO_H
#define ARQUIVO_H

/*
* Conteúdo 
*/

#endif
#pragma once

// conteúdo

And the error with multiple definitions is that you are importing the file aluno.c into teste.c .

Source (* .c) files should not be imported into #include <> , to import them you must specify next to the build.

gcc aluno.c -c -o aluno.o
gcc teste.c -c -o teste.o
gcc teste.o aluno.o -o projeto

# ou

gcc aluno.c teste.c -o projeto
    
04.11.2016 / 22:15