본문 바로가기
[Developer]/C,CPP

Visual Studio 오류코드 C1853 해결 방법

by 해피빈이 2017. 12. 15.

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 ==========



아주 간단한 오류지만, 나름 몇시간 동안 삽질하였으므로;;;


기록 차원에서 남겨둡니다.

반응형

댓글