Jump to content
Dexter's Lab

Problema com Linker em Linux

Recommended Posts

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.

Edited by Dexter's Lab

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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á

Share this post


Link to post
Share on other 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.

Share this post


Link to post
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.