2014-02-22 2 views
0

C 언어 프로그래밍을 사용하여 셸 파일을 만들려고합니다. 나는이 교수님이 이미 교수님으로부터받은이 스켈레톤을 가지고 있습니다 만, 나는이 오류가 있습니다.이 오류가 있습니다.이 문제가 있습니다.정의되지 않은 참조. 링커 명령이 종료 코드 1과 함께 실패했습니다.

myshell.c 파일 (이 파일은 수정하고 실행해야하는 파일입니다)

/* RCS information: $Id: myshell.c,v 1.2 2006/04/05 22:46:33 elm Exp $ */ 

#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <errno.h> 

extern char **getcmdstring(char *cmd); 

int main(void) { 
    int i; 
    char **args; 
    char cmd[4096]; 

    while(1) { 
    printf("$ "); 
    fgets(cmd,4096,stdin); 
    args = getcmdstring(cmd); 
    for(i = 0; args[i] != NULL; i++) { 
     printf("Argument %d: %s\n", i, args[i]); 
    } 
    } 
} 

및 shell.l 파일

/* RCS information: $Id: shell.l,v 1.1 2006/04/05 22:46:33 elm Exp $ */ 

#include <stdio.h> 
#include <strings.h> 
#include <string.h> 

int _numargs = 200; 
char *_args[200]; 
int _argcount = 0; 
char *strdup(const char *); 
%} 

WORD [a-zA-Z0-9\/\.-]+ 
SPECIAL [()><|&;] 

%% 
    _argcount = 0; _args[0] = NULL; 

{WORD}|{SPECIAL} { 
    if(_argcount < _numargs-1) { 
    _args[_argcount++] = (char *)strdup(yytext); 
    _args[_argcount] = NULL; 
    } 
} 

\n return (int)_args; 

[ \t]+ 

. 

%% 

char **getcmdstring(char *cmd) { 
    char **ret; 
    yy_scan_string(cmd); 
    ret = (char **)yylex(); 
    yy_delete_buffer(YY_CURRENT_BUFFER); 
    return ret; 
} 
+0

당신은 함수 선언으로'extern' 필요하지 않습니다 컴파일하여 수행 할 수 있습니다. – ajay

답변

1

가 누락 shell.l 기능은 소스에 포함된다. 이것은 어휘 분석기의 소스입니다. shell.l에서 shell.o 개체 파일을 작성해야합니다.

는 C 소스를

flex -o shell.c shell.l 

을 만든 다음

clang shell.c myshell.c -o myshell -ll 
+0

다른 오류가 있어도 작동하지 않습니다. clang 오류 해당 파일이나 디렉토리가 없습니다. shell.c – user3340449

+0

업데이트 된 답변을 참조하십시오. –

+0

그냥 내가 플렉스의 인수를 교환 내 MSG – user3340449

관련 문제