Ir ao conteúdo
  • Cadastre-se

Fazendo biblioteca estática


anon176

Posts recomendados

Ae galera boa tarde.

Seguinte, estava fazendo a minha primeira biblioteca em C e depois, quando fui referencia-la em um codigo .c mostrava a mensagem "undefined reference to matriz1..."

segue a baixo o codigo da biblioteca:

#ifndef __BIBLIOTECA_H

#define __BIBLIOTECA_H

void CreateMatriz(void);

void ReadMatriz(float **mat1,int m, int n);

void CreateMatrizIdentity(float **mat1, int ordem);

extern int CompareMatriz(float **mat1, float **mat2, int m, int n);

/* void AddMatriz(float **mat1, float **mat2);

void MulMatriz(float **mat1, float **mat2);

void PrintMatriz(float **mat1);

void DelMatriz(float **mat1); */

#endif /* __BIBLIOTECA_H */

#include <stdio.h>

void CreateMatriz(void)

{

extern float **mat1;

int i,m,n;

printf("Digite o numero de linhas da matriz:\n");

scanf("%d", &m);

printf("Digite o numero de colunas da matriz:\n");

scanf("%d", &n);

mat1 = (float **) malloc(m*sizeof(float*));

for(i=0;i<m;i++)

{

mat1 = (float*) malloc(n*sizeof(float));

}

}

void ReadMatriz(float **mat1,int m, int n)

{

int i,j;

for(i=0;i<m;i++)

{

for(j=0;j<n;j++)

{

printf("Digite o termo [%d][%d] da matriz:\n", i+1,j+1);

scanf("%f", &mat1[j]);

}

}

}

void CreateMatrizIdentity(float **mat1, int ordem)

{

int i,j;

for(i=0;i<ordem;i++)

{

for(j=0;j<ordem;j++)

{

if(i==j)

{

mat1[j]=1;

}

else mat1[j]=0;

}

}

}

extern int CompareMatriz(float **mat1, float **mat2, int m, int n)//m e n recebem as linhas e colunas das matrizes

{

int i,j,k;

k=0;

for(i=0;i<m;i++)

{

for(i=0;i<n;i++)

{

if(mat1[j]==mat2[j])

{

k++;

}

}

}

if(k==(m*n)) return 1;

else return 0;

}

/*

void AddMatriz(float **mat1, float **mat2)

{

}

void MulMatriz(float **mat1, float **mat2)

{

}

void PrintMatriz(float **mat1)

{

}

void DelMatriz(float **mat1)

{

}*/

Link para o comentário
Compartilhar em outros sites

1 Você incluiu o header para a sua biblioteca?

2 Você compilou a sua biblioteca devidamente?

3 A sua biblioteca e o header dela estavam na mesma pasta que o seu código que ia usa-la?

4 Se não estavam você colocou o caminho para o header e para a biblioteca no path do compilador?

5 Se estavam você incluiu o arquivo da biblioteca na chamada ao compilador?

O seu erro parece indicar em algum ponto de algum código você usa uma tal matriz1 mas não declara ela antes, talvez o seu erro esteja no código que vai usar e não na biblioteca em si ( visto que eu não achei nenhuma matriz1 nesse código ).

E por último, esse arquivo aí tá errado, parece que você declara o header e o fonte da biblioteca no mesmo arquivo, o que está estranhão, já que isso é feito em dois arquivos separados, a declaração vai no header (o .h) e a definição vai no código da biblioteca (o .c)

Link para o comentário
Compartilhar em outros sites

1 Você incluiu o header para a sua biblioteca?

2 Você compilou a sua biblioteca devidamente?

3 A sua biblioteca e o header dela estavam na mesma pasta que o seu código que ia usa-la?

4 Se não estavam você colocou o caminho para o header e para a biblioteca no path do compilador?

5 Se estavam você incluiu o arquivo da biblioteca na chamada ao compilador?

O seu erro parece indicar em algum ponto de algum código você usa uma tal matriz1 mas não declara ela antes, talvez o seu erro esteja no código que vai usar e não na biblioteca em si ( visto que eu não achei nenhuma matriz1 nesse código ).

E por último, esse arquivo aí tá errado, parece que você declara o header e o fonte da biblioteca no mesmo arquivo, o que está estranhão, já que isso é feito em dois arquivos separados, a declaração vai no header (o .h) e a definição vai no código da biblioteca (o .c)

Link para o comentário
Compartilhar em outros sites

Desse seu fonte o que está do #endif para baixo é a definição das suas funções e isso deveria estar no código fonte da sua biblioteca que deveria ir em um arquivo sua_biblioteca.c o resto desse arquivo deveria ir para um arquivo chamado sua_biblioteca.h e isso é o que deveria ser incluído via #include "sua_biblioteca.h" no seu código fonte.

Na hora de compilar o que você tem que fazer é simplesmente mandar o compilador compilar os dois juntos, ou então compilar sem invocar o linker e depois só invocar o linker para juntar o seu programa com a biblioteca...

Link para o comentário
Compartilhar em outros sites

Desse seu fonte o que está do #endif para baixo é a definição das suas funções e isso deveria estar no código fonte da sua biblioteca que deveria ir em um arquivo sua_biblioteca.c o resto desse arquivo deveria ir para um arquivo chamado sua_biblioteca.h e isso é o que deveria ser incluído via #include "sua_biblioteca.h" no seu código fonte.

Na hora de compilar o que você tem que fazer é simplesmente mandar o compilador compilar os dois juntos, ou então compilar sem invocar o linker e depois só invocar o linker para juntar o seu programa com a biblioteca...

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...