링커 도구 오류 LNK1211

미리 컴파일된 형식 정보를 찾을 수 없습니다. 'filename'이 연결되거나 덮어쓰여지지 않음

/Yc를 사용하여 컴파일된 파일 이름 개체 파일이 LINK 명령에 지정되지 않았거나 덮어쓰여지지 않았습니다.

미리 컴파일된 헤더를 사용하는 디버그 라이브러리를 만드는 경우 /Yc/Z7을 지정하면 Visual C++는 디버그 정보가 포함된 미리 컴파일된 개체 파일을 생성합니다. 이 오류는 미리 컴파일된 개체 파일을 라이브러리에 저장하고, 라이브러리를 사용하여 실행 파일을 빌드하고, 참조되는 개체 파일에 미리 컴파일된 개체 파일이 정의하는 함수에 대한 전이적 참조가 없는 경우에만 발생합니다.

이 상황을 해결하는 방법에는 두 가지가 있습니다.

  • 미리 컴파일된 헤더의 디버그 정보를 각 개체 모듈에 추가하려면 /Yd 컴파일러 옵션을 지정합니다. 이 메서드는 일반적으로 애플리케이션을 연결하는 데 필요한 시간을 늘릴 수 있는 큰 개체 모듈을 생성하기 때문에 바람직하지 않습니다.

  • 함수 정의를 포함하지 않는 미리 컴파일된 헤더 파일을 만들 때 /Yl을 지정하고 임의의 문자열의 이름을 전달합니다. 이렇게 하면 컴파일러가 미리 컴파일된 개체 파일에 기호를 만들고 미리 컴파일된 개체 파일과 연결된 미리 컴파일된 헤더 파일을 사용한 각 개체 파일에서 해당 기호에 대한 참조를 내보냅니다.

/Yc/Yl을 사용하여 모듈을 컴파일하는 경우 컴파일러는 줄임표(...)가 컴파일러에서 생성된 문자열을 나타내고 개체 모듈에 저장하는 것과 유사한 __@@_PchSym_@00@...@symbol_name기호를 만듭니다. 이 미리 컴파일된 헤더로 컴파일하는 모든 소스 파일은 지정된 기호를 참조하므로 링커에 개체 모듈과 라이브러리의 디버깅 정보가 포함됩니다.