2013-06-06 4 views
0

설명 : libshell.a 라이브러리가 있습니다. 사용하려고 시도하고있는 ord_interna 함수입니다. 그러나 잘못 연결 한 것 같습니다. 내 오류를 해결할 수 있습니까? , 그래서 나는 미래에 그것을 만들지 않습니까? 건배,Makefile : Linking. * a library

오류 :

/tmp/ccn5lbmJ.o: In function `main': 
minishell.c:(.text+0x4e): undefined reference to `ord_interna' 
collect2: error: ld returned 1 exit status 
make: *** [minishell.o] Error 1 

메이크 :

minishell.c 
entrada_minishell.c 
ejecutar.c 

그리고 당신이 원하는 :

당신의 메이크에서
CC=gcc 
CFLAGS=-Wall -pedantic -c 

all: microshell 

microshell: minishell.o 
    gcc minishell.o -o microshell 

minishell.o: minishell.c 
    gcc minishell.c minishell.h entrada_minishell.c entrada_minishell.h ejecutar.c ejecutar.h libshell.a 

clean: 
    rm -rf *o microshell 
+0

와우, 그 메이크 파일이 이상합니다. –

+0

gcc가 minishell.o에 끝나면 어떻게 수정해야합니까? 나는 메이크 파일을 사용하는 것에 익숙하지 않아서 미안하다. 나는 보통 Win으로 코딩하고 있지만, 이번에는 그것을 강제로해야한다. –

+0

@PiotrJerzyMamenas 당신은 왜 도서관과 연결이 필요한지, 어떻게 작동 하는지를 이해하지 못하는 것 같습니다. 나는 당신에게 구글 "C 컴파일 과정"을 제안하고 이것이 어디가 잘못되었는지 알 것이다. –

답변

4

, 나는 당신이 소스 파일이 같은데요 컴파일 한 다음 libshell.a과 함께 모두 연결하여라는 실행 파일을 만듭니다.. 당신이 원하는 경우

CC=gcc 
CFLAGS=-Wall -pedantic 

all: microshell 

microshell: minishell.o entrada_minishell.o ejecutar.o 
    $(CC) -o [email protected] $^ -L. -lshell 

당신은 clean 대상을 추가 할 수 있지만 그냥 당신이 가야한다 :이 경우에 당신이 뭔가 같이 할 수 있습니다.

편집 노트 :

  1. 는 컴파일 라인에 헤더 파일을 넣어 정말 이상 하네; 네가 실제로하고 싶지 않다고 생각했다.

  2. 자동 종속성 생성을 수행하려면 gcc의 -MMD 플래그를 조사해야합니다.