zzycami zzycami
关注数: 19 粉丝数: 28 发帖数: 1,504 关注贴吧数: 102
求助undefined reference to `xxx'的问题 stack.c #include "stack.h" void push(void *p){stack[++top] = p;} void *pop(){return stack[top--];} int isempty(){return top == -1;} void clear(){top = -1;} stack.h #ifndef _STACK_H #define _STACK_H void push(void* p); void* pop(); int isempty(); void clear(); void* stack[512]; int top = -1; #endif dir.c #include "kernel.h"#include "fat16.h"#include "stack.h"#include #include <stdio.h>#include #include ... void deldir(char *dirname){fat * fat1, *fat2;fcb *dir, *ddir;int i = 0;//check the dir nameif((!strcmp(dirname, "")) || (!strcmp(dirname, ".")) || (!strcmp(dirname, ".."))){printf("please input directory name!\n");return ;}for(i = 0; i < (int)strlen(dirname) ; i ++){if(dirname[i] == '/' || dirname[i] == '\\' || dirname[i] == ':' || dirname[i] == '*'|| dirname[i] == '?'|| dirname[i] == '"'|| dirname[i] == '<'|| dirname[i] == '>'|| dirname[i] == '|'){printf("directopry name or file name can't contain / \\ : * ? \" < > | \n");return ;}}ddir = (fcb *)(vhard + ptrcurdir.first * BLOCKSIZE);for(i = 0;i < BLOCKSIZE/sizeof(fcb); i ++){if(!strcmp(ddir->filename, dirname)){break;}ddir ++;}if(i == BLOCKSIZE/sizeof(fcb)){printf("have no such directory!\n");return ;}else {//delete the directoryint all = BLOCKSIZE/sizeof(fcb); ((fcb*)(vhard + ptrcurdir.dirno * BLOCKSIZE + ptrcurdir.diroff * sizeof(fcb)))->length --;fat1 = (fat *)(vhard + BLOCKSIZE);fat2 = (fat *)(vhard + 3*BLOCKSIZE); // Traverse and deleteclear();push(ddir);while(!isempty()){fcb* temp;int all = BLOCKSIZE/sizeof(fcb) - 2;dir = (fcb *)pop();temp = dir;dir = (fcb *)(vhard + dir->first * BLOCKSIZE + 2 * sizeof(fcb));memset(temp, 0, sizeof(fcb));while((all --) > 0){if(strcmp(dir->filename, "")){if(dir->attribute == 0x4){//if it is a directoryfat1 = (fat *)(vhard + BLOCKSIZE);fat2 = (fat *)(vhard + 3*BLOCKSIZE);fat1 += dir->first;fat2 += dir->first;if(fat1->id == END){fat1->id = FREE;fat2->id = FREE;}else {printf("error ocurred when modify fat!\n");}push((void *)dir);}else if(dir->attribute == 0x5 ){//do nothing}//else if(dir->attribute == 0x5 ) }//if(strcmp(dir->filename, ""))dir ++;}//while((all --) > 0)}//while((all --) > 0)}} main:main.o file.o dir.o sys.o disk.o stack.ogcc -o main main.o file.o dir.o sys.o disk.omain.o:main.c fat16.h kernel.hgcc -c main.cfile.o:file.c fat16.h kernel.hgcc -c file.cstack.o:stack.c stack.hgcc -c stack.cdir.o:dir.c fat16.h kernel.h stack.hgcc -c dir.csys.o:sys.c fat16.h kernel.hgcc -c sys.cdisk.o:disk.c fat16.h kernel.hgcc -c disk.cclear:rm main main.o file.o dir.o sys.o disk.o stack.o 错误: gcc -o main main.o file.o dir.o sys.o disk.odir.o: In function `deldir':dir.c:(.text+0xe4f): undefined reference to `clear'dir.c:(.text+0xe5a): undefined reference to `push'dir.c:(.text+0xe6b): undefined reference to `pop'dir.c:(.text+0xf32): undefined reference to `push'dir.c:(.text+0xf4e): undefined reference to `isempty'collect2: ld returned 1 exit status
1 下一页