뭘 이유는 이유야. 당연히 오류가 생겨서 빡쳤으니까 이 글을 쓰지...
지금까지는 잘 되던 빌드가 갑자기 어느 순간부터 오류가 뜨며 진행되지 않았다. Flutter & Dart 쪽의 문제는 아닌 듯하고, Windows 애플리케이션을 Visual Studio로 빌드하는 과정에서 생기는 오류 같다. 코드는 MSB8066. 이건 뭐 오류가 생긴 원인도 안 알려주고 VS Code는 친히 한글까지 깨뜨려 보여주니, 인내심이 바닥이 나지 않을 수 없었다.
다행히 2일 정도 소요해서 금방 해결했다. 그래서 혹시 누군가에게도 이런 오류가 생긴다면 참고할 수 있도록 기록을 짧게 남겨보고자 한다.
Android Studio는 잘 모르겠고, 나는 VS Code를 쓰는데 Code에서는 별다른 CLI 명령어를 치지 않고 GUI로 편하게 Flutter 앱을 디버깅/빌드할 수 있다. 그런데 그렇게 하면 빌드 시 세부 옵션을 설정할 수가 없다. 다행히 Terminal을 통해 앱을 빌드할 경우, 매개 변수 및 옵션을 같이 입력해서 세부 빌드 과정을 볼 수 있다. 이 글에서 Terminal 명령어는 Powershell 기준이며, 과정은 다음과 같다:
OS Terminal을 열고 Flutter 프로젝트가 위치한 디렉토리로 이동한다.
cd C:\Projects\flutter\
Terminal이 Flutter 프로젝트를 인식할 수 있게 명령어를 입력해준다.
flutter pub get
앱을 빌드해본다.
flutter run -d Windows -v
빌드 명령어를 조금 자세히 보면 -d
는 빌드할 디바이스를 지정하는 옵션이고, -v
는 Noisy logging이다. Noisy logging이란 단어는 처음 보지만 뭐 있는 로그 없는 로그 다 끄집어내서 사방팔방 시끄럽게 알려주겠다는 의미인 듯하다.
어쨌든 이렇게 진행하면 빌드 중 모든 로그가 전부 다 출력되게 된다. 만약 여기서 오류 원인을 찾아낼 수 있다면 아마 당신은 축복받은 사람일 것이다. 참 다행이다. 그게 아니라면 아래를 더 보자.
저렇게 해서 로그를 들춰보아도 명확한 원인이 드러나지 않을 경우, 아래 두 가지 상황 중 하나일 가능성이 높다:
첫 번째 경우는 뭐... 아마 개발자들이 하는 가장 흔한 실수 중 하나겠다. studio.h
마냥... 어쨌든 Asset들이 담긴 디렉토리 주소를 다시 한 번 확인하고, 빼먹은 문자는 없는지 체크해보자. 나의 경우는 앱에 올릴 SVG 파일들 다룰 때 했던 실수였다. 이건 뭐 금방 해결할 수 있었다.
해결하는데 2일이나 걸린 상황은 두 번째 경우에 해당되었던 것 같다. 왜냐면 프로젝트 디렉토리를 그냥 C 드라이브에 최대한 근접하게, 띄어쓰기 없이 영문으로만 구성된 곳에 박아두었더니 문제가 해결되었기 때문이다.
원래 내 기억으로는 Windows 탐색기에서 '바탕 화면' 폴더의 실제 주소는 'Desktop'이어야 했다. 그런데 Windows 11로 업데이트한 이후 바뀐 건지, 어느새 현지화가 되어 그냥 한글로 '바탕 화면'이라고 떡하니 박혀 있더라. 전체 디렉토리는 아래와 같았다:
C:/Users/{Username}/바탕 화면/Workspace/Git/{Flutter 프로젝트 디렉토리}
그래서 프로젝트 디렉토리를 아래 주소로 옮겼더니 정상적으로 빌드가 되었다:
C:/Workspace/Git/{Flutter 프로젝트 디렉토리}
사실 원래 발생한 오류는 MSB8066 뿐이었다. 그런데 이걸 해결한 후 블로그 글을 올리고 다시 빌드를 돌렸더니 이번엔 C1083이 뜨더라. 허겁지겁 해결 후 얘까지 같이 설명하기 위해 다시 블로그로 돌아왔다.
다행히 이 오류 같은 경우는 위의 방법(CLI에서 Noisy하게 빌드)으로 원인을 찾을 수 있었다. 상세한 원인은 아래와 같다:
fatal error C1083: {여기는 한글이 깨져 알아볼 수 없다}. 'atlstr.h': No such file or directory
대충 보니 atlstr.h
가 없다는 것 같다. 이걸 깔아줘야 하는데, 얘는 .dll 파일 찾는 것처럼 구글링해도 안 나온단다. Microsoft의 Visual Studio 제품을 확보해서 거기서 받아야 한다고 한다. 그런데 자비로운 마소는 개인 개발자들에게 Community 에디션을 제공해주니 사실 큰 문제는 아니다.
어쨌든 먼저 할 일은 Visual Studio Installer를 실행하는 것이다. Visual Studio 2022가 아니다! Installer다. Installer를 열고 본인이 가지고 있는 VS 제품의 오른쪽 '수정(M)' 버튼을 누른다.
다음 나오는 워크로드를 포함한 화면 상단의 4개 탭 중에서 '개별 구성 요소' 탭을 선택하고, 검색창에 'ATL'을 검색한 후, '최신 v143 빌드 도구용 C++ ATL(x86 및 x64)'를 체크한다. 앞에 'Spectre'나 '스펙터' 어쩌구 붙은 것들도 있는데, v143에 x86 및 x64 환경의 ATL이면 일단 다 체크하고 보자.
스크롤을 내리며 1) ATL, 2) v143, 3) x86 및 x64 환경, 4) Spectre 또는 스펙터가 포함, 이상 4가지 조건을 만족한 구성 요소를 다 체크했다면, 화면 좌측 하단의 '다운로드하는 동안 설치' 버튼 옆의 '수정(M)' 버튼을 누른다. 수정이 끝나고 설치가 완료되면 다시 빌드를 돌려보자. (나는 이미 ATL 설치가 완료된 상태라 변경 내용이 없어 '닫기(C)'라고 출력된다. 참고 바람.)
이걸로 해결이 안 되면 v142, v141까지 다 깔아보자. 나는 v142, v141 깔아서 해결이 안 되었는데 v143 까니까 해결이 되어서 얘부터 언급을 했다.
프로젝트, 라이브러리 또는 프레임워크를 저장할 디렉토리에는 한글 쓰지 말자. 띄어쓰기도 넣지 말자.
저건 진짜 국룰인 것 같다. 난 한국도 좋고 한글도 좋아서 왜 자꾸 디렉토리 경로에 영어를 쓰는지 이해가 안 갔는데, 한 번 쳐맞아보니까 생각이 바뀐다. 물론 여전히 한글은 사랑한다. 세종대왕 만세...
어쨌든 더 짜증났던 건 평소에는 잘 돌아가다가 갑자기 며칠 전부터 이 난리를 쳤다는 거다. 처음부터 문제였으면 모르겠는데, 되다가 안 되니까 더 곡할 노릇이었다. 왜지... Flutter를 업데이트를 해서 그런가. 아무튼 생각보다 금방 해결해서 나름 안심한 2일이었다.
그리고 여기 나온 방법으로도 해결이 안 된다면 이런 허접한 글 말고 StackOverflow를 참고하자. 난 이 이상은 잘 모르겠다.
그으럼 20000