MFC 프로그램 버전업을 진행하며 (하)

Yerin·2024년 7월 3일

지난 글에 이어서 계속됩니다 ..


빌드 환경 조성하기

사실 api 변경하는 건 하루도 안걸려서 다 끝났다.
그 뒤로 이제 3일동안.. 환경 설정을 하게 되는데 (ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 하..)
생각보다 이게 검색하면 제대로 된 결과가 안나온다.. (정확히 말하면 결과는 나오는데 나한테 해당 안댐)


mfc 사용 시 dll 관련한 에러

#error Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

동적으로 연결할거면 Dynamic하게 연결하겠다는 설정을 추가해줘야한다.
아마 MT로 지정해둬서 안될 확률이 매우 높다.


디버그 모드에서는

  1. 속성 > 일반 > 프로젝트 기본값 > MFC 사용 > 공유 DLL에서 MFC 사용
  2. C/C++ > 코드 생성 > 런타임 라이브러리 > 다중 스레드 디버그 DLL(/MDd)

릴리즈 모드에서는 다음과 같이 해야한다. (아무튼 정적으로 해야함. 이유는 모름.. 근데 추측해보자면.. 모든 dll을 공유해야한다는 3에바인 상황을 없애려는거 아닌가 싶음..? 물론 나의 경우엔.. 빌드할 때 터져붤임.. 아마 이건 회사 release 설정에 뭔가 걸려있어서 그런듯 .. 진짜 모름)

  1. 속성 > 일반 > 프로젝트 기본값 > MFC 사용 > 정적 라이브러리에서 MFC 사용
  2. C/C++ > 코드 생성 > 런타임 라이브러리 > 다중 스레드 (/MT)

바꿨는데도 같은 에러가 뜬다?
하위 프로젝트도 모두 확인해보길 바란다…


아 , 참고로 아래와같이 __imp__관련 오류들은 모두.. mfc 관련 라이브러리 설정 문제일거다. 동일하게 해결할 수 있음을 참고하세용~

error LNK2001: __imp__wsprintfA 외부 기호를 확인할 수 없습니다.
error LNK2001: __imp__wsprintfA 외부 기호를 확인할 수 없습니다


구성관리자 플랫폼 설정

module machine type 'x64' conflicts with target machine type 'X86'

구성관리자에서 플랫폼이 무엇으로 설정되어있는지 확인해야한다.

예를 들어 x64로 빌드하고 싶다면 프로젝트의 컨텍스트에서 플랫폼을 모두 x64로 변경해줘야한다.


dll을 못찾는 에러 (visual studio 2015 경우)

"mfc140u.dll을 찾을 수 없어 코드 실행을 진행할 수 없습니다. 프로그램을 다시 설치하면 이 문제가 해결될 수 있습니다.”


당신이 만약 운이 좋아서 이 에러를 검색했을 때 제 블로그로 들어왔다면 운이 (댕)좋은겁니다..

검색하니까.. 무슨 dll을 다운받아서 Windows/System32에 추가하면된다 ~ 블라블라 ~ 이런말들이 많아서 그대로 수행했는데 그냥 전혀 해결안됨. 빌드하다가 터져버림 ㅜㅜ

C++ Retributable이 잘못된거다~ 이런말도 있어서 재설치 했는데 아무 의미 없음..
(이외에 10가지 방법을 모두 시도해보았지만 모두 실패함)


뒤도 돌아보지 말고 그냥 빨리 visual studio 다시 설치하세요


그냥 처음 vs 설치할 때 뭔가 문제가 있었던건데 이제야 그 문제가 생긴겁니다..
참고로 삭제도 순탄히 되지 않습니다. ㅎ
visual studio 완전 제거 후 재설치하는 법은 검색하면 많이 나오니 알아서들 검색하길 바랍니다 ㅎㅎ


visual studio 2015는 아래 uninstaller로 삭제를 진행해야한다.
-> 삭제 프로그램


나의 경우에 삭제는 되었는데 자꾸 MSI 파일 두개가 삭제되지 않았다고 떴다.

Uninstalled LocalESPCui for ko-kr with exit code: 0
Uninstalled WCF Data Services Tools for VS 2015 KOR Language Pack with exit code: 0

이 분 글을 본 상태여서 삭제를 안하고 넘어갈 수가 없었다.
나같은 경우에 저 블로그 대로 나온 해결방법은 안통했고,
레지스트리 편집기에 들어가서 LocalEsPWCF Data Service 검색해서 관련된거 걍 다 삭제해 버렸다.

그 결과.. 모두 삭제를 완료할 수 있었다.

다시 재설치하니까 모든 오류가 해결되고… 성공적으로 빌드 되었다 (아좌좌~!)


배포

release 버전으로 빌드하여 팀원들에게 공유했다.
dll 관련하여 글을 쉽게 써주셔서 좋다. 한번 읽어봐도 좋을 것 같다. 아무튼 공유할 때 필요한 dll들을 함께 공유해야한다. 안그러면 열심히 만든 exe가 실행이 안되는 공포를 맛볼 수 있답니다 ? ㅎㅎ (exe와 같은 경로에만 있으면 된다)

저 블로그에서는 저렇게 말하는데.. 위에서 말했다시피 나는 release 빌드 할 때 static 링크로 빌드 했는데 dll 2개를 공유해야했음.. (이유 아시는 분있으면 설명해주세요.. 무슨 원리인지 모르겠음)

이거에 대해 덧붙여 설명하자면.. 똑같은 .avi 확장자 파일인데.. 어떤 영상은 open이 되고 어떤건 open이 안댐.. 이게 무슨 문제지했는데 dll 파일 하나가 공유 안돼서였음;;; 신기한 컴퓨터의 세계.. 이렇게 일관성 없을 때 오류 잡는게 너무 어렵다 ㅜ (근데 파트장님은 뭔가 dll 없어서인것같은데요? 하고 바로 해결해버릐심~ 어케 추측한건지 감도 안옴;;)


결론

사실 환경설정하면서 진짜 오류 한 30개 해결한 것 같은데 인터넷에 10분 정도 서치하면 나오는거라 기록을 안했다.
근데 진짜 dll없으면 걍 다시 visual studio 설치하세요. 그게 빠름 ㅜㅜ

그래도 처음으로 버전업 하면서 나름 재밌었다 (ㅋㅋ)
파트장님이랑 버그잡기 페어프로그래밍 했는데 심장 개떨리고.. 내가 얼마나 허접해보일지 엄청 걱정됐다..ㅋㅋㅋ 그래도 적당히 절어서 다행이었다 ^^
그럼 다시 문서 스터디 하러 가보겠습니다. (싫다… 흑흑) 안뇽 ~

profile
𝙸 𝚐𝚘𝚝𝚝𝚊 𝚕𝚒𝚟𝚎 𝚖𝚢 𝚕𝚒𝚏𝚎 𝙽𝙾𝚆, 𝙽𝙾𝚃 𝚕𝚊𝚝𝚎𝚛 !

0개의 댓글