Dexter's Lab Posted September 7, 2013 at 03:01 PM Report #523764 Posted September 7, 2013 at 03:01 PM (edited) 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 September 7, 2013 at 03:20 PM by Dexter's Lab
HappyHippyHippo Posted September 7, 2013 at 09:12 PM Report #523801 Posted September 7, 2013 at 09:12 PM #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 Portugol Plus
Dexter's Lab Posted September 7, 2013 at 09:36 PM Author Report #523804 Posted September 7, 2013 at 09:36 PM 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á
pwseo Posted September 8, 2013 at 03:14 PM Report #523833 Posted September 8, 2013 at 03:14 PM 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now