Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Dexter's Lab

Problema com Linker em Linux

Mensagens Recomendadas

Dexter's Lab

Boas, estou com problemas com o linker, novamente.

Se houvesse alguém que me pudesse explicar todo o processo envolvido na compilação e as funções do linker, que me fizesse perceber todo este esquema, agradecia imenso.

O erro é "undefined reference to menu()"

Estou em Linux e uso o codeblocks para programar em C. Todos os ficheiros estão na mesma pasta.

Tenho neste momento 3 ficheiros:

maintest.c

#include <stdio.h>
#include "biblioteca.h"
int main() {
menu(2, "opçao 1", "opçao 2");
}

biblioteca.h

#ifndef _BIBLIOTECA_H_
#define _BIBLIOTECA_H_

#define null '\0'
typedef enum { false, true } boolean;
typedef unsigned short uint;
typedef char* string;


void menu(int count, ...);

#endif

biblioteca.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include "biblioteca.h"

void menu(int count, ...) {
va_list listPointer;
va_start(listPointer, count);
for(int i = 1; i <= count; i++) {
	char *string = va_arg(listPointer, char*);
	line(1, 1);;
	printf("%d ..... %s", i < count ? i : 0 , string);
}
va_end(listPointer);
}

Se alguém me puder dar uma vista nisto e explicar-me porque os ficheiros não se estão a relacionar, seria excelente.

Editado por Dexter's Lab

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include "biblioteca.h"

void menu(int count, ...) {
       va_list listPointer;
       va_start(listPointer, count);
       for(int i = 1; i <= count; i++) {
               char *string = va_arg(listPointer, char*);
               line(1, 1);; // <------ onde é que isto está definido ??!?!?!??!?
               printf("%d ..... %s", i < count ? i : 0 , string);
       }
       va_end(listPointer);
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Dexter's Lab

Desculpa, HHHippo, isso foi a copiar para aqui. Não coloquei tudo. Essa função está definida dentro da mesma biblioteca, eu é que não quis copiar toda a biblioteca. Mesmo sem esse line() apresenta o mesmo problema.

Se compilar através do terminal com os seguintes comandos:

gcc -Wall maintest.c biblioteca.c -o result

./result

ele arranca, mas pelo codeblocks não o faz..Já direcionei o linker o ficheiro .h, estão todos os ficheiros na mesma pasta.. não entendo porque não está a funcionar

no entanto se eu correr apenas o seguinte comando:

gcc -Wall maintest.c -o result

Já não funciona, apresentando o mesmo output: "undefined reference to menu()".

Ou seja, é mesmo do linker, mas no codeblocks preciso configurar tudo o link dos ficheiros, e é esse o problema neste caso. porque isto em windows e com o dev-c++ nunca me aconteceu, portanto isto é novidade para mim, tal como foi novidade há uns tempos com a biblioteca SDL.

Eu gostava de aprender mais sobre o linker/compilador e todos os processos que estão por detrás. Se me pudesses indicar boas fontes, seria todo o meu interesse. Obrigado desde já

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Parece-me que por algum motivo o Codeblocks não está a reconhecer o ficheiro biblioteca.c como "parte do teu projecto", e como tal não o passa ao gcc na altura da compilação, tal como acontece no exemplo que deste em que o gcc falha com o mesmo erro que o codeblocks.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.