이 글을 3줄로 요약하면
· R6034는 파일이 없다는 뜻이 아니라, C 런타임 라이브러리를 매니페스트 없이 잘못된 방식으로 불러왔다는 뜻입니다.
· 그래서 재설치만 반복하면 안 잡히는 경우가 있습니다. 어느 폴더의 DLL이 먼저 잡혔는지가 진짜 쟁점입니다.
· 원인은 네 갈래입니다. 판별표에서 자기 상황을 찾아 해당 섹션만 처리하면 됩니다.
R6034는 정확히 무슨 뜻인가
"없다"가 아니라 "잘못된 방식으로 불렀다"입니다. 이 차이가 해결 순서를 바꿉니다.
화면에는 보통 이렇게 뜹니다. "Runtime Error! Program: C:\…\실행파일.exe — R6034: An application has made an attempt to load the C runtime library incorrectly." 한글 윈도우에서도 이 부분만 영어로 나오는 경우가 많습니다.
마이크로소프트 문서는 이 코드를 "애플리케이션이 매니페스트를 사용하지 않고 C 런타임 라이브러리를 로드하려 했다"고 설명합니다. 매니페스트는 프로그램이 "나는 이 버전의 런타임을 쓴다"고 적어 두는 표식입니다.
비주얼 C++ 런타임은 공유 side-by-side 어셈블리로 배포됩니다. 같은 이름의 DLL이 여러 버전 공존할 수 있는 구조라서, 어느 것을 쓸지는 매니페스트가 정합니다. 표식 없이 파일을 직접 집어 오면 윈도우는 그 로드를 지원되지 않는 방식으로 보고 R6034를 냅니다.
DLL 파일을 인터넷에서 받아 넣는 방식은 쓰지 않습니다
"DLL이 없다"는 오류가 아니기 때문에 파일을 어디선가 받아 System32에 넣으면 오히려 매니페스트 없이 놓인 파일이 하나 더 늘어 상황이 나빠집니다. 런타임은 항상 마이크로소프트 공식 재배포 패키지로만 설치합니다.
그래서 이 오류에서 확인할 것은 세 가지로 정리됩니다. 필요한 런타임이 설치돼 있는가, 그 프로그램 폴더에 낡은 CRT DLL이 함께 놓여 있지 않은가, 다른 프로그램의 폴더가 검색 경로 앞쪽을 차지하고 있지 않은가입니다.
증상으로 원인 좁히기
한 프로그램만 그런지, 여러 프로그램이 그런지가 갈래를 정합니다.
| 증상 | 유력한 원인 | 먼저 볼 항목 |
|---|---|---|
| 서로 상관없는 여러 프로그램에서 같이 뜬다 | 재배포 패키지 손상 또는 특정 버전 누락 | 원인 A → 설치 목록 확인·복구 |
| 특정 프로그램 하나에서만, 설치 직후부터 뜬다 | 프로그램 폴더에 낡은 CRT DLL이 동봉됨 | 원인 B → 설치 폴더 검색 |
| 다른 프로그램을 설치한 뒤부터 멀쩡하던 것이 뜬다 | 그 프로그램 폴더가 PATH 앞쪽을 차지함 | 원인 C → 환경 변수 Path 확인 |
| 파이썬·오토캐드 등으로 만든 실행 파일에서만 뜬다 | 그 도구가 참조하는 폴더의 DLL이 먼저 잡힘 | 원인 B·C → 두 곳 모두 확인 |
| 윈도우 업데이트나 백신 검사 직후부터 시작됐다 | 시스템 파일 또는 프로그램 파일 손상 | 원인 D → sfc·DISM 후 재설치 |
| 네 가지를 다 해봤는데 규칙을 못 찾겠다 | 실제 로드된 모듈을 확인해야 하는 구간 | 7번 → 이벤트 로그·모듈 확인 |
둘 이상 해당한다면 원인 A부터 처리합니다. A는 다른 프로그램에 영향을 주지 않는 안전한 조치이고, B·C는 파일과 설정을 건드리므로 순서를 뒤로 두는 편이 낫습니다.
원인 A재배포 패키지 손상·버전 누락
여러 프로그램에서 함께 뜬다면 여기부터 봅니다. 가장 되돌리기 쉬운 조치입니다.
비주얼 C++ 재배포 패키지는 연도별로 별개입니다. 2013용과 2015~2022용은 서로를 대신하지 못하고, 같은 연도라도 x86(32비트)과 x64(64비트)가 각각 필요합니다. 64비트 윈도우라도 32비트 프로그램을 쓴다면 x86이 있어야 합니다.
1지금 무엇이 깔려 있는지 목록으로 본다
Win + I → 좌측 "앱" → "설치된 앱" → 우측 상단 검색창에 Visual C++를 입력합니다. 연도와 (x86)·(x64) 표기를 함께 확인합니다. 대표 이미지가 이 화면입니다.
2지우지 말고 먼저 복구를 돌린다
해당 항목 우측 점 세 개(⋯) → "수정"을 누르면 복구와 제거 중에 고를 수 있는 창이 뜹니다. 복구를 선택하고 재부팅합니다. 제거부터 하면 그 패키지에 의존하던 다른 프로그램까지 함께 멈출 수 있습니다.
3빠진 버전은 공식 페이지에서 받아 채운다
복구로도 안 되면 그 항목만 제거한 뒤, 마이크로소프트 공식 배포 페이지에서 같은 연도의 x86과 x64를 둘 다 받아 설치합니다. 프로그램 설명서에 요구 버전이 적혀 있으면 그 버전을 우선으로 맞춥니다.
2015·2017·2019·2022는 한 덩어리입니다
이 네 해는 같은 계열로 묶여 하나만 설치하면 됩니다. 반면 2010·2012·2013은 각각 따로입니다. 목록에 2013이 아예 없는데 그 시절 프로그램을 쓰고 있다면, 2015~2022를 아무리 다시 깔아도 채워지지 않습니다.
이 방법이 안 통하는 경우
필요한 연도가 x86·x64 모두 설치돼 있고 복구까지 마쳤는데도 특정 프로그램 하나에서만 계속 뜬다면, 시스템이 아니라 그 프로그램이 자기 폴더의 파일을 먼저 집어 오는 상황입니다. 원인 B로 넘어갑니다.
원인 B프로그램 폴더에 들어 있는 구버전 CRT DLL
R6034가 가장 자주 만들어지는 자리입니다. 프로그램이 자기 옆의 파일을 먼저 봅니다.
윈도우가 DLL을 찾는 순서에서 실행 파일이 있는 폴더가 앞쪽입니다. 예전 방식으로 포장된 프로그램은 msvcr90.dll이나 msvcr100.dll을 설치 폴더에 함께 넣어 두는데, 이 파일이 매니페스트 없이 로드되면 그대로 R6034가 됩니다.
1오류창에 적힌 경로로 들어간다
오류창 첫 줄의 "Program:" 뒤에 실행 파일 전체 경로가 나옵니다. 그 경로를 파일 탐색기 주소창에 붙여넣고 실행 파일이 있는 폴더까지 들어갑니다. 창이 이미 닫혔다면 프로그램 바로가기 우클릭 → "파일 위치 열기"로 같은 곳에 갑니다.
2그 폴더에서 CRT DLL을 검색한다
폴더 우측 상단 검색창에 위 글자를 입력합니다. msvcr90.dll·msvcr100.dll·msvcr110.dll 같은 파일이 나오면 이 갈래가 맞습니다. 같은 폴더에 Microsoft.VC90.CRT 같은 하위 폴더가 함께 있는지도 봅니다.
3지우지 말고 이름만 바꿔 시험한다
해당 DLL을 삭제하지 말고 확장자 뒤에 .bak을 붙여 이름만 바꿉니다. 프로그램을 다시 실행해 오류가 사라지면 그 파일이 원인이고, 다른 오류가 새로 뜨면 이름을 원래대로 되돌려 원상 복구합니다.
System32에 있는 파일은 건드리지 않습니다
이 조치의 대상은 프로그램 설치 폴더 안에 동봉된 사본뿐입니다. C:\Windows\System32나 C:\Windows\SysWOW64의 런타임 파일은 다른 프로그램이 함께 쓰는 것이라 이름을 바꾸면 여러 프로그램이 한꺼번에 멈춥니다.
이 방법이 안 통하는 경우
설치 폴더에 CRT DLL이 아예 없는데도 오류가 계속된다면, 파일을 끌어온 자리가 그 폴더 밖입니다. 다른 프로그램의 폴더가 검색 경로에 먼저 잡혀 있을 수 있으므로 원인 C로 넘어갑니다.
원인 CPATH에 걸린 다른 프로그램 폴더
멀쩡하던 프로그램이 다른 프로그램을 설치한 뒤부터 그렇다면 이 갈래입니다.
실행 파일 폴더에 없으면 윈도우는 시스템 폴더를 보고, 그다음 환경 변수 Path에 적힌 폴더를 위에서부터 훑습니다. 어떤 프로그램이 설치되면서 자기 폴더를 Path 앞쪽에 끼워 넣었고 그 안에 낡은 CRT DLL이 있으면, 전혀 상관없는 프로그램이 그 파일을 물고 들어갑니다.
그래서 "어제까지 잘 되던 프로그램이 오늘부터 R6034를 낸다"는 상황이 만들어집니다. 바뀐 것은 그 프로그램이 아니라 주변 환경입니다. 그 프로그램을 아무리 재설치해도 같은 결과가 나오는 이유이기도 합니다.
1환경 변수 편집 창을 연다
Win + R에 위 명령을 입력하면 환경 변수 창이 바로 열립니다. 아래쪽 "시스템 변수" 목록에서 Path를 선택하고 "편집"을 누릅니다.
2시스템 폴더보다 앞에 있는 항목을 살핀다
목록에서 C:\Windows\system32보다 위에 있는 프로그램 폴더들이 후보입니다. 그 폴더를 하나씩 열어 원인 B와 같은 방법으로 msvcr로 시작하는 파일이 있는지 확인합니다.
3지우지 말고 순서를 내린다
해당 항목을 선택하고 우측 "아래로 이동"으로 시스템 폴더 아래쪽으로 내립니다. 확인을 누른 뒤 로그아웃했다가 다시 로그인해야 바뀐 Path가 적용됩니다. 항목을 삭제하면 그 프로그램이 명령줄에서 동작하지 않게 되므로 순서만 바꿉니다.
바꾸기 전에 현재 값을 복사해 둡니다
편집 창에서 "텍스트 편집"을 누르면 전체 값이 한 줄로 나옵니다. 이 값을 메모장에 붙여 저장해 두면, 나중에 다른 프로그램이 동작하지 않을 때 원래 순서로 되돌릴 수 있습니다.
이 방법이 안 통하는 경우
Path 앞쪽에 프로그램 폴더가 없거나 순서를 바꿔도 같다면 경로 문제가 아닙니다. 파일 자체가 깨졌을 가능성이 남으므로 원인 D로 넘어갑니다.
원인 D시스템 파일·프로그램 자체 손상
업데이트나 백신 검사 직후부터 시작됐다면 이 갈래를 봅니다.
런타임 DLL이나 매니페스트 파일이 부분적으로 깨져도 같은 코드가 나옵니다. 백신이 프로그램 파일 일부를 격리했거나, 업데이트 중 강제 종료로 파일이 잘린 경우가 대표적입니다.
1시스템 파일 검사를 돌린다
시작 버튼 우클릭 → "터미널(관리자)"에서 실행합니다. "복구할 수 없는 파일이 있습니다"로 끝나면 아래 2번으로, "위반이 없습니다"면 시스템은 멀쩡하다는 뜻이니 3번으로 갑니다.
2복구 원본을 고친 뒤 다시 검사한다
sfc /scannow
DISM이 구성 요소 저장소를 복구한 뒤 sfc를 한 번 더 돌립니다. DISM은 인터넷 연결이 필요하고 완료까지 시간이 걸리므로 중간에 창을 닫지 않습니다.
3백신 격리함을 확인하고 프로그램을 다시 깐다
Windows 보안 → 바이러스 및 위협 방지 → 보호 기록에서 그 프로그램 파일이 격리돼 있는지 봅니다. 격리된 것이 없다면 프로그램을 완전히 제거하고 남은 설치 폴더까지 지운 뒤 최신 버전으로 다시 설치합니다.
이 방법이 안 통하는 경우
sfc가 깨끗하고 재설치도 마쳤는데 같은 화면이 뜬다면, 남은 방법은 그 프로그램이 실제로 무엇을 불러왔는지 확인하는 것뿐입니다. 7번 섹션으로 갑니다.
어떤 DLL이 잡혔는지 확인하는 법
추측을 멈추고 실제로 로드된 파일 경로를 읽는 단계입니다.
R6034는 "어느 파일을 잘못 불렀는지"만 알면 나머지가 자동으로 정해지는 오류입니다. 앞의 네 갈래를 다 헤매기 전에, 이 섹션을 먼저 밟아 대상 폴더를 특정하는 편이 빠른 경우도 많습니다.
1이벤트 로그에서 오류 모듈 이름을 읽는다
Windows 로그 → 응용 프로그램에서 오류 표시가 붙은 최근 항목을 클릭합니다. 하단 "일반" 탭에 오류 모듈 이름과 전체 경로가 나옵니다. 여기 적힌 폴더가 원인 B(프로그램 폴더)인지 원인 C(다른 프로그램 폴더)인지 바로 갈립니다.
2같은 이름의 파일이 몇 군데 있는지 센다
터미널(관리자)에서 실행하면 그 이름의 파일이 있는 경로가 전부 나옵니다. 시간이 걸리므로 C:\Program Files처럼 범위를 좁혀 돌려도 됩니다. 시스템 폴더 외에 사본이 여러 개 나오면 그것이 이 오류의 재료입니다.
3확인한 경로로 원인 섹션을 되짚는다
경로가 그 프로그램 설치 폴더 안이면 원인 B, 다른 제품의 폴더면 원인 C, C:\Windows\WinSxS 아래이면 원인 A의 재배포 패키지 복구로 돌아갑니다.
파이썬으로 만든 실행 파일도 원리는 같습니다
패키징 도구로 만든 exe는 실행 시 임시 폴더에 파일을 풀어 놓고 그 폴더에서 DLL을 찾습니다. 이때 시스템에 설치된 런타임과 임시 폴더의 사본이 어긋나면 같은 코드가 납니다. 이 경우 원인 C의 Path 정리와, 빌드에 쓰인 런타임 버전을 원인 A에서 맞춰 두는 것이 조치입니다.
자주 묻는 질문
본문에서 다루지 않은, 자주 갈리는 지점만 모았습니다.
Q.한 프로그램에서만 뜨는데도 재배포 패키지를 다시 깔아야 하나요?
A.한 프로그램에서만 뜬다면 원인 B가 먼저입니다. 다만 그 프로그램이 요구하는 연도의 패키지가 목록에 아예 없다면 채워 넣어야 합니다. 요구 버전은 프로그램 설명서나 제조사 지원 페이지에 적혀 있고, 없으면 2015~2022 계열의 x86·x64를 함께 맞춰 두면 대부분 덮입니다.
Q.관리자 권한으로 실행하면 되기도 하던데, 그게 해결인가요?
A.권한이 올라가면 참조하는 폴더와 사용자 환경 변수가 달라져 다른 DLL이 잡히는 경우가 있어 증상이 사라지기도 합니다. 원인을 없앤 것이 아니라 경로가 바뀐 것이므로, 임시 회피로만 쓰고 원인 B·C를 확인해 두는 편이 좋습니다.
Q.msvcr90.dll을 인터넷에서 받아 넣으면 안 되나요?
A.권하지 않습니다. R6034는 파일이 없어서 나는 오류가 아니라 매니페스트 없이 로드돼서 나는 오류라서, 파일을 하나 더 놓으면 조건이 그대로 재현됩니다. 출처를 알 수 없는 DLL은 보안 위험도 있습니다. 런타임은 공식 재배포 패키지로만 설치합니다.
Q.32비트 프로그램인데 x64만 깔려 있어도 되나요?
A.안 됩니다. 32비트 프로그램은 x86 런타임을, 64비트 프로그램은 x64 런타임을 씁니다. 64비트 윈도우에도 두 벌이 각각 설치될 수 있으니, 목록에서 같은 연도 항목이 (x86)·(x64) 두 줄로 보이는지 확인하는 것이 원인 A의 핵심입니다.
Q.시스템 복원으로 되돌리는 것이 더 빠르지 않나요?
A.원인 C처럼 다른 프로그램 설치가 방아쇠였다면 복원으로 증상이 멎기도 합니다. 다만 그 프로그램을 다시 설치하는 순간 같은 상태로 돌아갑니다. 복원을 쓰더라도 어느 폴더가 문제였는지는 7번 섹션에서 확인해 두는 것이 좋습니다.
함께 보면 좋은 글
같은 재배포 패키지·실행 오류 계열에서 자주 함께 나오는 코드입니다.
VCRUNTIME140_1.dll이 없습니다 오류 해결 순서 2015~2022 계열 패키지가 부분적으로만 설치된 상태에서 나오는 오류입니다 · 눌러서 확인하기 → 0xc0000142 오류 해결 순서 런타임을 정리한 뒤 실행 자체가 막히는 쪽으로 증상이 바뀌었다면 이 글입니다 · 눌러서 확인하기 → 0xc0000005 액세스 위반 오류 해결 순서 같은 프로그램이 런타임 대신 메모리 접근에서 튕길 때 볼 글입니다 · 눌러서 확인하기 →참고 문서 · Microsoft Learn — C Run-Time Error R6034





