libgcc_s_dw2-1.dll이 누락되어 프로그램을 시작할 수 없습니다


166

Code :: Blocks를 사용하여 C ++로 간단한 프로그램을 만들었습니다.

Code :: Blocks에서 실행하면 올바르게 작동합니다. 그러나 실행 파일을 두 번 클릭하여 실행하면 다음 메시지가 표시된 창이 나타납니다.

libgcc_s_dw2-1.dll을 (를) 컴퓨터에서 찾을 수 없어서 해당 프로그램을 시작할 수 없습니다.
이 문제를 해결하려면 프로그램을 다시 설치하십시오.

그래서 무엇이 문제입니까? 문제를 해결하려면 어떻게해야합니까?

답변:


196

나는 이것이 Microsoft Visual Studio 설정이 아니라 MinGW / gcc 컴파일러 문제라고 생각합니다.

libgcc_s_dw2-1.dll컴파일러의 bin 디렉토리에 있어야합니다. 런타임 링크를 위해이 디렉토리를 PATH 환경 변수에 추가하거나 컴파일러 플래그에 "-static-libgcc -static-libstdc ++"를 추가하여 문제점을 피할 수 있습니다.

실행 파일을 배포하려는 경우 후자가 가장 적합합니다. 자신의 컴퓨터에서만 실행하려는 경우 PATH 환경 변수를 변경하는 것이 매력적인 옵션입니다 (실행 파일의 크기를 유지함).

업데이트 :

Greg Treleaven의 의견을 바탕으로 (아래 의견 참조) 다음 링크를 추가합니다.

[Code :: 스크린 샷 "프로젝트 빌드 옵션"차단

[GNU gcc 링크 옵션]

후자의 논의는 포함 -static-libgcc하고 -static-libstdc++링커 옵션.


@xRobot과 동일한 문제가 있으며 컴파일러 플래그에 항목을 추가 할 수있는 곳을 찾을 수 없으므로 다른 옵션에 추가 한 다음 링커 옵션에 추가하려고 시도했지만 오류 메시지가 계속 발생했습니다. 내가하고있는 일에 문제가 있습니까?
Greg Treleaven

@Greg Treleaven : 명확성을 위해 Code :: Block을 사용하여 실행 파일을 빌드 중입니다. IDE 내에서 예상대로 작동하지만 실행하려고하면 "libgcc_s_dw2-1.dll이 없기 때문에 시작할 수 없습니다"라는 오류가보고됩니다 IDE 외부. 컴파일러의 bin 디렉토리를 확인했는데,이 DLL이 실제로 있습니다. 라이브러리에서 컴파일 된 코드를 가져 와서 DLL (런타임 연결)이 필요하지 않지만 작동하지 않는 정적 연결을 수행하여 문제를 해결하려고합니다. 두 가지 제안 : 클린 빌드를 수행하고 (옵션을 변경하면 다시 빌드를 트리거하지 않을 수 있음) PATH 변수를 추가하십시오.
hardmath

@ hardmath : 깨끗한 재구성을 한 후에도 여전히 작동하지 않으므로이 문제를 해결하기 위해 다른 방법 중 하나를 사용해야한다고 생각합니다. 도움을 주셔서 감사합니다.
Greg Treleaven

@Greg Treleaven : 컴파일러의 bin 디렉토리를 PATH에 추가하는 이유는 표준 라이브러리 (DLL)의 런타임 연결을 위해 실행 파일이 여전히 빌드되고 있음을 보여주기 때문입니다. 문제가 있다고 생각하고 컴파일러 플래그를 넣을 위치 (라이브러리 코드의 정적 링크를 수행하려는 경우)를 찾아야합니다.
hardmath

4
이 토론은 여기에서 계속되고 해결 됩니다 .
David C

37

Eclipse의 프로젝트 특성> C / C ++ 빌드> 설정> MinGW C ++ 링커> 기타에서 찾을 수 있습니다.

맨 위에있는 "링커 플래그"에 추가해야합니다. 다른 곳. 그런 다음 다시 빌드하십시오.

이클립스 속성 스크린 샷

나는 그것들을 정적으로 연결하면 최적화로도 최대 1,400kb의 크기로 폭발한다는 것을 알았습니다. 공유 DLL을 복사하는 것보다 277kb 더 큽니다. UPXing을 한 후에도 388kb 더 큽니다. 여기서 잃어버린 / 잃어버린. 최종 사용자가 DLL을 다른 곳에 설치했는지 여부를 결정할 수 있으므로 DLL을 포함하기 만하면됩니다.


1
새로 생성 된 각 프로젝트에 링커 플래그를 추가하지 않는 방법이 있습니까?
Roger Ng

독자에게 : 이미지에 추가 된 옵션에 유의하십시오. 작동합니다. 이것은 참조로 도움이됩니다 : orfe.princeton.edu/help/article-296
PALEN

10

코드 :: 블록 : 설정-> 컴파일러-> 링커 설정-> 다른 링커 옵션에 '-static'을 추가하십시오.


1
제목 당 "missing"dll과 관련하여 완벽하게 작동했습니다. 너무 빠르고 쉽습니다. 먼저이 파일을 먼저 사용하는 것이 좋습니다.
Paul Connolly

최고의 솔루션!
iyy0v

6

PC에서 해당 dll을 찾아 실행 파일이있는 동일한 디렉토리에 복사하십시오.


왜 이것이 Visual Studio에서 발생하지 않습니까?
xRobot

1
또한 다른 dll과 함께 수행됩니다. 예를 들어, msvcrt90.dll이 없으면 시각적으로 컴파일 된 프로젝트가 시작되지 않습니다 (iut은 일반적으로 시스템 전체에 설치됨)
Bruce

6

참고 . 내 문제를 해결했습니다.

그건 그렇고, 분명히 compiler깃발입니까? 어쩌면 linker더 적절한 용어는 여기에있다?


1
올바른 용어에 +1! 예, gcc 링크 옵션에 대한 "링크"는 정적 라이브러리에 대한 잉크 링이었습니다.
hardmath

5

"libgcc_s_dw2-1.dll"를 복사했습니다.는 was.exe입니다. Msys를 사용하는 경우 \ msys \ bin으로 복사하십시오. make.exe의 경로가 env에 설정되어 있는지 확인하십시오. PATH (make.exe가 "bin"폴더에 있고 msys가있는 경우 \ msys \ bin입니다) 컴파일, 실행, 디버그 등 행복합니다.


5

MinGW http sourceforge.net 트리로 이동하십시오. Home / MinGW / Base / gcc / Version4 (또는 사용중인 버전) / gcc-4 (version) / 아래에 gcc-core-4.8.1-4-mingw32-dll.tar.lzma와 같은 파일이 있습니다. . 그것을 추출하고 libgcc_s_dw2-1.dll 및 기타 dll을 찾을 수있는 bin 폴더로 이동하십시오. 필요한 것을 복사하여 bin 디렉토리에 붙여 넣으십시오.


5

컴파일러에서 "g ++"대신 "gcc"를 사용하여이 문제를 극복 할 수있었습니다. 나는 이것이 대부분의 사람들에게 옵션이 아니라는 것을 알고 있지만 해결 방법으로 언급했다고 생각했습니다. :)


4

system32 또는 다른 dll 파일과 같은 방식으로 파일을 넣을 수 없으므로 실행하려는 모든 프로그램이 컴퓨터에서 해당 문제를 일으키지 않습니까?

나는 그것을 넣을 경로가 필요합니다.

방금 만든 프로그램을 실행할 때마다 디렉토리에 넣는 것은 다소 성가신 일입니다 ...

편집 : 해결책을 찾았습니다.

libgcc_s_dw2-1.dll을 컴퓨터의 특정 위치에 추출하십시오. libgcc_s_dw2-1.dll을 요청하는 프로그램의 디렉토리에 압축을 푸는 것이 좋습니다.

그래도 작동하지 않으면 libgcc_s_dw2-1.dll을 시스템 디렉토리로 추출해야합니다. 기본적으로 다음과 같습니다.

  • C : \ Windows \ System (Windows 95 / 98 / Me)
  • C : \ WINNT \ System32 (Windows NT / 2000)
  • C : \ Windows \ System32 (Windows XP, Vista, 7)

64 비트 버전의 Windows를 사용하는 경우 libgcc_s_dw2-1.dll을 C : \ Windows \ SysWOW64 \에 배치해야합니다.

기존 파일을 덮어 쓰십시오 (그러나 원본 파일의 백업 사본을 만드십시오). 컴퓨터를 재부팅하십시오.

문제가 계속 발생하면 다음을 시도하십시오.

  • Windows 시작 메뉴를 열고 "실행 ..."을 선택하십시오.
  • CMD를 입력하고 Enter를 누르십시오 (또는 Windows ME를 사용하는 경우 COMMAND를 입력하십시오).
  • regsvr32 libgcc_s_dw2-1.dll을 입력하고 Enter 키를 누릅니다.

12
여기에 댓글로 댓글을 올리지 마십시오. 그것은 스택 오버플로가 작동하는 방식이 아닙니다. "you"대신 "u"를 사용하고 "because"대신 "cos"를 사용하지 않아도됩니다. 여기에서 대화 말하기가 허용되지 않습니다.
meagar

4

설정 >> 컴파일러 및 디버거로 이동 한 다음 링커 설정 탭을 클릭하고 "기타 링커 옵션"편집 제어로 이동하여 "-static-libgcc -static-libstdc ++"를 붙여 넣습니다. 컴파일러 플래그 옵션이 없습니다. Code :: Blocks에 대한 컴파일러 플래그 옵션에서 문제를 해결하는 방법이므로 여기에 해결책을 찾고 여기에 "-static-libgcc -static-libstdc ++"에 대해 올린 한 사람이 올바른 아이디어를 제공했습니다. 나는 우연히 나머지를 알아 냈지만 작동했지만 파일은 Code :: Blocks 외부에서 클릭 할 수 있습니다. 데스크톱에서 바로 작동합니다.


3

해당 dll의 경로를 PATH 환경 변수에 추가하십시오.


왜 이것이 Visual Studio에서 발생하지 않습니까?
xRobot

해당 dll의 경로가 VisualStudio의 도구-> 옵션-> 프로젝트 및 솔루션-> VC ++ 디렉토리-> 실행 파일에 나열되어 있기 때문일 수 있습니다. Visual Studio는 dll의 경로를 검색 할 때 여기 및 PATH 환경 변수를 찾습니다.
Bojan Komazec

2

컴파일 라인에 -static-libgcc 를 포함 하면 문제가 해결됩니다.

g++ my.cpp -o my.exe -static-libgcc

@hardmath 에 따르면

예를 들어 MSYS2에있는 경우 프로파일 [.profile] 에서 별명 을 작성할 수도 있습니다.

alias g++="g++ -static-libgcc"

이제 GCC 명령도 ;-)를 통해 진행됩니다.

터미널을 다시 시작해야 함


1

다른 링커 옵션에 "-static"을 추가하면이 문제가 해결됩니다. 다른 시스템에서 이것을 테스트 한 후에도 동일한 문제가 있었지만 내 시스템에서는 그렇지 않았으므로 개발 시스템에서이를 보지 못하더라도 정적으로 링크하는 경우이 세트가 있는지 확인해야합니다.

또 다른 참고 사항은 DLL을 실행 파일과 동일한 폴더에 복사하는 것은 정적으로 링크한다는 아이디어를 잃기 때문에 해결책이 아닙니다.

또 다른 옵션은이 문제를 해결하는 MinGW의 TDM 버전을 사용하는 것입니다.

편집 업데이트 : 모든 사람이 문제를 해결하지 못할 수 있습니다. 내가 최근에 이것을 발견 한 또 다른 이유는 다른 사람이 컴파일 한 라이브러리를 사용할 때입니다. 제 경우에는 잘못 컴파일 된 SFML이므로 다른 버전의 MinGW로 컴파일 할 때 존재하지 않는 DLL이 필요했습니다. 사용하다. 나는 왜소한 빌드를 사용합니다. 이것은 다른 것을 사용했기 때문에 어디서나 DLL을 가지고 있지 않았으며 정적 빌드이므로 DLL을 원하지 않았습니다. 해결책은 라이브러리의 다른 빌드를 찾거나 직접 빌드하는 것입니다.


0

msys2로 작업하면서 디버그 환경에서 내 프로젝트의 릴리스 버전을 실행하려고하는 것과 동일한 오류가 발생했습니다. 내 문제에 대한 해결책은 분명합니다 : 디버그 기호로 실행 파일을 사용하십시오.


0

CodeBlocks에서 설정 ... 컴파일러 ...로 이동하여 1) 파란색 상자의 두 항목 또는 2) 녹색 상자의 한 항목을 선택할 수 있습니다.

코드 블록 컴파일러 설정


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.