Jump to content

Problema com Linker em Linux


Dexter's Lab

Recommended Posts

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.

Edited by Dexter's Lab
Link to comment
Share on other sites

#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
Link to comment
Share on other sites

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á

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.