에러 메모

PowerShell에서 C++ exe Program을 실행했을 때, 아무 일도 일어나지 않는 오류(no output)

내 이름인데 윤기를 왜 못써 2025. 5. 7. 17:06

노트북 환경과 데스크탑 환경을 동일하게 C++ 개발환경을 VS Code + mingw으로 구축했다. 하지만 왜인지 노트북에서는 Code Runner를 활용해서, C++ exe를 실행할 때 출력, 에러 아무것도 일어나지 않는 문제가 발생했다. 오류코드라도 나면 모르겠는데, 해결하기가 너무 어려웠다.

 

맘먹고 오류를 해결해보고자, Stack Overflow에서 동일한 증상을 찾기 시작했다.

 

오류 파악 원인1: CMD 환경에서의 테스트

Code Runner Extension은 C++ 프로그램을 실행할 때, `g++ example.cpp -o example && .\example` 명령어로 g++로 컴파일을 진행한 뒤, 해당 파일을 실행한다. 나는 VS Code 내부 터미널에서 실행하고자, 'Run In Terminal' 옵션을 설정해뒀기에 PowerShell에서가 아닌, Command Prompt(CMD)에서 실행을 시도해봤다. 테스트는 기본적인 Hello World 예제로 진행했다.

그런데 CMD에서는 정상 작동한다. 더욱 미궁으로 빠져들어갔다...

오류 파악 원인2: PowerShell과 CMD 프로그램 종료 코드 확인

PowerShell에서의 실행은 아무 에러도 발생하지 않기때문에, 종료 코드를 확인해봤다.

  • PowerShell : `$LASTEXITCODE`
  • CMD : `echo %errorlevel%`

각각 위의 명령어로 확인할 수 있다.

명령어를 실행하면, 마지막에 프로그램이 종료한 코드를 확인할 수 있는데, 이 코드가 0이 나와야지 프로그램이 정상 종료된 것이다.

 

CMD에서는 정상적으로 0을 반환하며 종료됐지만, PowerShell에서는 `-1073741819` 과 같이 이상한 종료코드를 반환하면서, 프로그램이 종료된 것을 알 수 있었다. 찾아본 결과 이러한 오류는 g++실행 디렉터리 내에 컴파일에 필요한 `.dll`파일이 없으면 발생하는 문제라고 한다. 그런데 나는 `mingw/bin` 디렉터리를 환경변수에 정상적으로 등록해뒀다.

오류 파악 원인3: 환경변수 확인

PowerShell과 CMD에서의 `mingw/bin`의 등록을 위해 환경변수를 확인해봤다.CMD는 시스템 환경변수 + 유저 환경변수 순으로 잘 나열되어 있었지만, PowerShell에서는 우선순위로 anaconda와 관련된 환경변수들이 있었다. 그 중 발견한 `anaconda3\Library\mingw-w64\bin`. 해당 라이브러리 내에는 내가설치한 mingw와 다르게 모든 `.dll`파일이 있는 것 같아 보이진 않았다.

 

그런데 .dll 파일은 거기서 참조를 해오는 듯 보였다.

오류 해결: 환경 변수 수정 or -static-libstdc++

위에 anaconda3에 있는 mingw를 제거하거나, 환경변수에서 제거할 수도 있겠지만, 기존에 설치되어 있는 라이브러리 활용에 문제가 발생할 수 있어서 쉽사리 하지는 못하겠다. 혹은 환경변수 우선순위를 변경해서 뒤로 미뤄볼 순 없나싶은데.. 저게 어디서 추가된지 도저히 찾을 수 없다.

 

결과적으로 g++에서 컴파일을 진행할 때 표준C++라이브러리를 정적으로 링크하는 옵션인 `-static-libstdc++`을 추가해서, 컴파일을 진행하면 오류를 해결할 수 있다.

 

`g++ example.cpp -o example -static-libstdc++ && .\example`

반응형