2014-07-11 4 views
2

큰 프로그램을 구현하기 시작했습니다. 하지만 큰 문제가 발생했습니다. 그래서 여기에 내 프로그램의 아주 단순화 된 코드가있다. 나는 내 기능에 대한 별도의 .c 파일을 가지고있다. normal.c 주 프로그램은 main.c이고 나는이 두 파일을 cal.h 헤더 파일과 연결했다.C - 링크 된 파일의 함수 오류에 대한 정의되지 않은 참조

main.c를

#include <stdio.h> 
#include "cal.h" 

void main() 
{ 
    int num1, num2, ans; 
    num1=5; 
    num2=5; 
    ans=add(num1, num2); 
    printf("%d" ,ans); 
} 

normal.c

#include "cal.h" 

int add(int num1, int num2) 
{ 
    return num1+num2; 
} 

cal.h

#ifndef CAL_H_INCLUDED 
#define CAL_H_INCLUDED 
#include <errno.h> 

int add(int num1, int num2); 

#endif // CAL_H_INCLUDED 

하지만이를 컴파일 할 때, 그것은 오류를 제공 .. \ main.c | 10 | 'add'에 대한 정의되지 않은 참조 |

Windows 8.1에서 CodeBlocks v.13.12를 사용하고 있습니다.이 질문에 대한 답변은 매우 만족 스럽습니다. CodeLite로 시도했지만 같은 오류가 발생합니다. 고맙습니다!

+4

다음, 당신은'normal.o'을 포함 할 사용하십시오 우분투 터미널 에 필요합니까? – Barmar

+0

아니요. 그리고 C에 익숙하지 않아서 유감입니다.'.o' 파일로 작업하는 것에 대해서는 전혀 몰라요. 설명이 큰 도움이 될 것입니다! –

+2

CodeBlock이 작동하는 방법을 말할 수는 없지만 일반적으로 C 컴파일 방법이 있습니다. 각 .c 파일은 별도로 * .o 파일 ("오브젝트 파일")로 컴파일됩니다. 따라서 main.c는 main.o로 컴파일되고 normal.c는 normal.o로 컴파일됩니다. 이들 중 어느 것도 실행 가능하지 않으며 완전한 프로그램이 아닙니다. 그러면 두 개의 오브젝트 파일이 서로 링크됩니다. 이 경우 "연결됨"은 사용법과 달리 기술 용어입니다. 링커가 수행하는 단계입니다. 링커는 실제 실행 파일을 생성합니다. 일반적으로 IDE는 자동으로 동일한 프로젝트의 .c 파일을 연결합니다. – EvanED

답변

0

코드 블록에는 자동 연결이 있지만 프로젝트의 소스 및 헤더 파일이 있어야합니다.

개별 .c & .h 파일을 만들었을 때 IDE에서 개체 파일을 연결하려고했지만 예상하지 못했던 문제가있었습니다. 나는 그것들을 프로젝트에 넣었고 효과가 있었다!

0

코드의 전체 컴파일을 사용하십시오. c 코드 파일 main.c 및 normal.c가 ./src에 있고 헤더 파일 cal.h가 ./inc에있는 경우 현재 디렉토리 (.)의 메소드 아래에있는 방법을 따르십시오.

g ++ ./src/main.c ./src/normal.c -I ./inc -o main

이제 기본 바이너리 파일이 실행됩니다. 코드의

2

전체 컴파일은 당신이 파일을 링크 할 때

gcc normal.c main.c -o out -lm