collect2: ld returned 1 exit status 에러
글쓴이: 익명 사용자 / 작성시간: 일, 2018/11/25 - 2:58오후
안녕하세요 make시스템으로 컴파일하는데 에러가 나서 여쭤봅니다 ㅠ
-bash-3.2$ make
gcc -c recMain.c
gcc -o recMain recMain.o recIO.o
정의되지 않음 첫번째 참조된
기호 파일:
dbAdd recMain.o
ld: 치명적: symbol referencing errors. No output written to recMain
collect2: ld returned 1 exit status
*** Error code 1
make: Fatal error: Command failed for target `recMain'
main 코드는
#include "recIO.h"
int main(int argc, char *argv[])
{
char *file;
char base[5] = "stdb";
char c;
if(argc > 1)
file = argv[1];
else
{
file = base;
dbcreate(file);
}
while(1)
{
printf(" 'a' 추가 'q' 검색 'u' 수정 'd' 삭제 'e' 종료\n");
c = getchar();
switch (c)
{
case 'a':
dbAdd(file);
break;
case 'q':
dbquery(file);
break;
case 'u':
dbupdate(file);
break;
case 'd':
dbdelete(file);
break;
case 'e':
exit(0);
default:
printf("잘못된 입력입니다.\n");
}
}
return 0;
}입니다.
영어를 잘 못해서 해외 사이트 구글링을 찾아도 알 수가 없네요..
왜 이런 오류가 나는지 설명좀 부탁드립니다 ㅠ
Forums:

추가적인 헤더, Makefile, 소스파일입니다.
본문이 너무 길어질거같아서 답글로 남깁니다.
Makefile:
recMain: recMain.o recIO.o gcc -o recMain recMain.o recIO.o recMain.o: recMain.c recIO.h recIO.c student.h gcc -c recMain.c recIO.o: recIO.c recIO.h student.h gcc -c recIO.crecIO.c ( 학생 정보를 입력,삭제,추가,검색 하는 파일 레코드 )
#include "recIO.h" void dbcreate(char *file) { int fd; student rec; if ((fd = open(file, O_WRONLY | O_CREAT, 0600)) == -1) { exit(1); } printf("%-9s %-8s %-4s", "학번", "이름", "점수"); while(scanf("%d %s %d", &rec.id, rec.name, &rec.score) == 3) { lseek(fd,(rec.id - START_ID) * sizeof(rec),SEEK_SET); write(fd,&rec, sizeof(rec)); } printf("생성 완료\n"); close(fd); } void dbquery(char *file) { int fd, id; student rec; if ((fd = open(file, O_WRONLY)) == -1) { exit(2); } printf("검색할 학번 입력: "); if(scanf("%d",&id) == -1) { lseek(fd,(id-START_ID)*sizeof(rec),SEEK_SET); if((read(fd,&rec,sizeof(rec)) > 0 ) && (rec.name[0] != 0)) printf("학번:%d\t 이름:%s\t 점수:%d\n", rec.id, rec.name, rec.score); else printf("레코드 %d 없음\n", id); } else printf("입력 오류"); close(fd); } void dbdelete(char *file) { int fd,id; student rec; if((fd = open(file,O_WRONLY)) == -1) { exit(3); } printf("학번 입력: "); while(scanf("%d", &id) == 1) { if(lockf(fd,F_LOCK,sizeof(rec)) == -1) { perror(file); exit(4); } if((read(fd,&rec,sizeof(rec)) > 0 ) && (rec.name[0] != 0)) { rec.name[0] = 0; lseek(fd,-sizeof(rec),SEEK_CUR); write(fd,&rec,sizeof(rec)); printf("삭제되었습니다."); lockf(fd,F_ULOCK,sizeof(rec)); } else printf("레코드 %d 없음\n",rec.id); } close(fd); } void dbadd(char *file) { int fd; student rec; if((fd = open(file,O_RDWR)) == -1) { exit(5); } printf("학번,이름,점수를 입력하세요 : "); while(scanf("%d %s %d",&rec.id, rec.name, &rec.score) == 3) { lseek(fd,(rec.id - START_ID) * sizeof(rec), SEEK_SET); if(lockf(fd,F_LOCK,sizeof(rec)) == -1) exit(8); else { lseek(fd, -sizeof(rec),SEEK_CUR); write(fd,&rec,sizeof(rec)); printf("추가되었습니다.\n"); lockf(fd,F_ULOCK,sizeof(rec)); } } close(fd); } void dbupdate(char *file) { int fd,id; student rec; if((fd = open(file,O_RDWR)) == -1) { exit(6); } printf("수정할 학생의 학번 입력:"); while(scanf("%d",&id) == 1) { lseek(fd, (long) (id-START_ID)*sizeof(rec), SEEK_SET); if(lockf(fd,F_LOCK,sizeof(rec)) == -1) { exit(7); } if((read(fd,(char *)&rec,sizeof(rec))>0) && (rec.id !=0)) printf("학번:%d\t 이름:%s\t 점수:%d\n", rec.id, rec.name, rec.score); else printf("레코드 %d 없음 \n",id); printf("새로운 점수 : "); scanf("%d", &rec.score); lseek(fd,(long) -sizeof(rec), SEEK_CUR); write(fd,(char *) &rec, sizeof(rec)); lseek(fd,(long)(id-START_ID)*sizeof(rec),SEEK_SET); lockf(fd,F_ULOCK,sizeof(rec)); printf("\n수정할 학생의 학번 입력:"); } close(fd); }recIO.h
댓글 달기