반응형
LNK2005, LPCTSTR 변환, 매니페스트 권한 오류 등 C++/MFC 개발 중 발생하는 주요 에러를 한 번에 해결할 수 있는 실전 가이드입니다.
1. fatal error LNK2005 – 중복 정의(링커 오류) 해결법
원인: 헤더에 함수/변수를 정의하고, 여러 cpp에서 동일하게 포함하여 링커가 중복 심볼을 찾음.
해결법:
- const 변수 등은 헤더에서 정의하지 않고 extern 선언만 사용.
- 링커 옵션에 /FORCE:MULTIPLE을 추가해 중복 정의를 무시하도록 설정.
관련 사례:
- Stack Overflow - LNK2005 with static library
- Visual Studio에서 정적 라이브러리를 사용할 때 동일한 전역 객체를 여러 번 링크하여 발생.
팀 경험 팁:
- 여러 개발자가 유틸리티 헤더를 공용으로 쓸 때 중복 정의 주의. 팀 코드 리뷰에서 #pragma once와 extern 키워드 사용 여부 확인 필요.
2. fatal error LNK1561 – Entry Point(진입점) 누락
원인: main() 혹은 WinMain() 함수가 없거나 링커 설정 불일치.
해결법:
- 프로젝트 속성 → 링커 → 고급 → Entry Point에 mainCRTStartup 또는 WinMainCRTStartup 지정
관련 사례:
- 콘솔 앱을 만들었지만 Win32 프로젝트로 설정되어 있으면 이 에러 발생 가능.
- Visual Studio의 새로운 프로젝트 마법사에서 /SUBSYSTEM 설정이 자동으로 잘못 설정될 때 자주 나타남.
팀 경험 팁:
- 프로젝트 템플릿을 사용할 때, 입출력 방식(Console vs Windows GUI)을 확실히 명시하고 소스 코드 기본 구조를 점검하는 습관이 중요.
3. “LPCTSTR에서 const char *로 변환할 수 없습니다” – 유니코드 관련 오류
원인: MFC 기본 문자셋이 유니코드이고, const char*와 호환되지 않아 발생.
해결법:
- 프로젝트 속성 → 구성 속성 → 일반 → 문자 집합 → “멀티바이트 문자 집합”으로 변경
관련 사례:
- 문자열 리터럴에서 "문자열" 대신 _T("문자열") 사용 필요.
- CString과 std::string 간의 변환 시 타입 충돌 문제 다수 보고됨.
팀 경험 팁:
- 신입 개발자들은 TCHAR, LPCTSTR, CString, std::string 등 다양한 문자열 타입을 혼용하다 컴파일 오류에 직면함. 공통 코드 스타일 가이드에 문자열 처리 방식 명시 필요.
4. 매니페스트 파일 오류 – 관리자 권한 문제
원인: 실행 시 매니페스트 요구로 인해 권한 부족 발생 가능성.
해결법:
- Visual Studio와 Windows SDK를 최신 버전으로 업데이트 후, 문제가 지속되면 VS 재설치 권장
- app.manifest에서 <requestedExecutionLevel>을 asInvoker 또는 requireAdministrator로 조정
관련 사례:
- UAC(사용자 계정 컨트롤) 설정이 켜진 상태에서 requireAdministrator로 설정되었지만 실제 실행은 표준 권한으로 시도될 때 충돌 발생.
팀 경험 팁:
- 배포 전 테스트 환경에서 관리자 권한 요구 여부를 명확히 체크. QA 단계에서 사용자 권한별 시나리오를 고려해 테스트 필요.
5. “코드 요소가 읽기 전용입니다…” – 자동화 코드 삽입 장애
원인: .NCB 캐시가 손상되어 다이얼로그 클래스 자동 생성이 막힘.
해결법:
- 프로젝트 폴더에서 .NCB, .VC.db, .sdf 파일을 삭제하고 Visual Studio 재시작
관련 사례:
- ClassWizard 또는 리소스 에디터로 생성한 핸들러 코드가 삽입되지 않음.
팀 경험 팁:
- 대용량 솔루션에서는 NCB 손상이 빈번하게 발생. Visual Studio를 관리자 권한으로 실행하고, 정기적으로 솔루션 정리 및 재빌드 습관화 필요.
6. MFC CFile 사용법 – 파일 입출력 핵심 정리
주요 클래스 기능:
- 생성자: CFile(filename, flags) – 모드 지정 가능
- Open, Read, Write – 파일 열기, 읽기, 쓰기
- Seek, SeekToEnd, GetLength, SetLength – 위치 조정 및 크기 제어
- Close – 파일 닫기 (소멸자에서 자동 닫힘)
관련 사례:
- CFile::Open 호출 시 경로가 상대 경로인지 절대 경로인지에 따라 파일 열기 실패 빈번
- CFileException 처리를 생략하여 디버깅 어려움 초래
팀 경험 팁:
- 파일 작업 시 CFileException을 적극 활용하고, 로그 파일 또는 백업 파일을 생성해 디버깅 및 사용자 피드백에 활용 가능하도록 구현할 것.
현재는 개발툴이 업데이트 되어 없어졌을 수도 있으나 과거 사례를 다시 찾아 정리해 봅니다.
반응형
'취미생활 > 프로그래밍' 카테고리의 다른 글
C++/MFC 활용 팁: 서버·소켓·모달리스·쓰레드·메뉴·타이밍 정리 (5) | 2025.07.09 |
---|---|
SAS 엑셀 Import 시 한글 깨짐 해결과 변수명 자동 변환 (2) | 2025.07.08 |
SAS 옵션 코드들 (2) | 2025.07.07 |
SAS 9.4에서 여러 개의 SAS 파일 자동 실행하는 방법 (1) | 2025.07.05 |
CSV·텍스트·Access 파일을 Excel로 변환하기 (2) | 2025.07.05 |