Visual Studio 2017 기준이며, C1853의 에러인 경우입니다.
내용을 보자면..
이러한 내용입니다.
프로젝트 구조는 간단합니다.
중요한건 확장자가 cpp라는 사실..
<ConsoleApplication1.cpp>
#include "stdafx.h"
#include "calc_util.h"
int main()
{
int num1 = 10;
int num2 = 20;
int result = add_nums(num1, num2);
printf("result: %d", result);
printf("END of sample");
return 0;
}
그리고 유틸로 작성하는 소스 파일과
<calc_util.c>
#include "calc_util.h"
#include "stdafx.h"
int add_nums(int a, int b)
{
printf("input num a: %d, b: %d\n", a, b);
return a + b;
}
그 파일을 컴파일 할 수 있도록 포함시키는 헤더파일입니다.
<calc_util.h>
int add_nums(int a, int b);
이젠 준비 끝.
그러면 빌드(Ctrl + Shift + B)를 수행해볼까요.?
그 결과는 참혹합니다.
오류 C1853 'Debug\ConsoleApplication1.pch' 미리 컴파일된 헤더 파일이 이전 버전의 컴파일러에서 만들어졌거나, 미리 컴파일된 헤더가 C++인데 C에서 사용하고 있거나 또는 그 반대의 경우입니다. ConsoleApplication1 d:\workspaces\c_project\sampleproject1\consoleapplication1\clac_util.c 2
분명히 내용상은 문제가 없는데 빌드가 되지 않습니다.
그 결과를 몇시간 삽질한 결과, 원인을 발견했습니다.
바로 c 파일과 cpp 파일을 동시에 프로젝트에 삽입한 채로, 빌드를 수행했다는 사실이죠.
Visual Studio는 이것을 각각 빌드할 경우 메인이 되는 ConsoleApplication1.obj의 cpp 링커에서는 c로 컴파일한 calc_util.obj 파일을 연결할 수 없다는 내용을 말해주는 것입니다.
따라서, 해결책은 간단하죠. 바로 기준을 맞춰주는 것입니다.
크게 두가지가 있는데..
첫째, 기준이 cpp이므로, 기준 자체를 포함하여 프로젝트 모든 코드의 기준을 c로 맞춰준다.
[프로젝트] - [프로젝트 이름의 속성(P...)] - [구성 속성] - [C/C++] - [고급] 메뉴에서
컴파일 옵션을 C코드로 컴파일(/TC)로 맞춰주면 됩니다.
이 경우 간단하게 설정하여 끝난다는 장점이 있으나, 메인 프로젝트에서 cpp관련 문법이나, 함수를 사용하였을 경우 빌드 에러가 발생할 수 있다는 단점이 있죠.
그래서 두번째 방법이 있습니다.
둘째, c로 된 소스파일을 하나씩 컴파일 옵션을 C++로 지정하는 것입니다.
방법은 솔루션 탐색기에서 "해당 c 소스파일 선택" - [속성] - [구성 속성] - [C/C++] - [고급] 메뉴에서
컴파일 옵션을 C++코드로 컴파일(/TP)로 맞춰주면 됩니다.
이렇게 완료하니, 정상적으로 빌드되는 것을 확인할 수 있습니다.
1>------ 모두 다시 빌드 시작: 프로젝트: ConsoleApplication1, 구성: Debug Win32 ------
1>stdafx.cpp
1>ConsoleApplication1.cpp
1>clac_util.c
1>코드를 생성하고 있습니다...
1>ConsoleApplication1.vcxproj -> D:\Workspaces\C_Project\SampleProject1\Debug\ConsoleApplication1.exe
1>ConsoleApplication1.vcxproj -> D:\Workspaces\C_Project\SampleProject1\Debug\ConsoleApplication1.pdb (Partial PDB)
========== 모두 다시 빌드: 성공 1, 실패 0, 생략 0 ==========
아주 간단한 오류지만, 나름 몇시간 동안 삽질하였으므로;;;
기록 차원에서 남겨둡니다.
댓글