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 :: Blocks「プロジェクトビルドオプション」のスクリーンショット]

[GNU gccリンクオプション]

後者の説明には-static-libgcc-static-libstdc++リンカーオプションが含まれます。


私は@xRobotと同じ問題を抱えており、コンパイラフラグに何かを追加する場所が見つからなかったため、[その他のオプション]、[リンカーオプション]に追加しようとしても、エラーメッセージが引き続き表示されました。私がやっていることに何か問題がありますか?
Greg Treleaven、2011

@Greg Treleaven:わかりやすくするために、Code :: Blockを使用して実行可能ファイルを構築しています。IDE内で期待どおりに動作しますが、実行しようとすると、「libgcc_s_dw2-1.dllがないため開始できません」というエラーが報告されます。 IDEの外。コンパイラのbinディレクトリを確認したところ、このDLLは実際にそこにあります。静的リンケージを実行して問題を修正しようとしています。これは、ライブラリからコンパイル済みコードを取り込むため、DLL(ランタイムリンケージ)は必要ありませんが、機能しません。2つの提案:クリーンビルドを行い(オプションを変更しても再ビルドがトリガーされない場合があります)、PATH変数を追加してみます。
hardmath

@hardmath:クリーンな再構築を行ってもまだ機能しないため、これを修正するには他の方法のいずれかを使用する必要があると思います。助けてくれてありがとう。
Greg Treleaven、2011

@Greg Treleaven:コンパイラーのbinディレクトリーをPATHに追加しようとする理由は、実行可能ファイルがまだ標準ライブラリ(DLL)の実行時リンク用に構築されていることを(それが機能する場合)示すためです。問題はそれだと思っています。コンパイラー・フラグを置く場所を(ライブラリー・コードの静的リンクを行いたい場合)見つける必要があります。
hardmath

4
この議論はここで続きます(そして解決されます)。
David C

37

Eclipseでは、プロジェクトのプロパティ> C / C ++ビルド>設定> MinGW C ++リンカー>その他の下にあります。

上部の「リンカーフラグ」に追加する必要があります。他にはない。次に、再構築します。

Eclipseプロパティのスクリーンショット

それらを静的にリンクすると、最適化を行っても最大1,400kbのサイズが爆発することがわかりました。共有DLLをコピーするだけの場合と比較して277kb大きくなります。すべてUPXした後も388kb大きくなります。ここで非常に失う/失う。エンドユーザーがDLLを他の場所にインストールしている場合は削除するかどうかを決定できるため、DLLを含めるだけです。


1
新しく作成された各プロジェクトにリンカーフラグを追加しないようにする方法はありますか?
Roger Ng

読者へ:画像に追加されたオプションに注意してください。これは機能します。これは参照として役立ちます:orfe.princeton.edu/help/article-296
PALEN

10

コード::ブロック:設定->コンパイラ->リンカー設定->その他のリンカーオプションに「-static」を追加します。


1
これは、タイトルごとの「欠落している」dllに関しては完全に機能しました。非常に迅速かつ簡単です。最初にこのDLLを試してみることをお勧めします。
ポールコノリー

最高のソリューション!
iyy0v

6

PCでそのDLLを見つけ、実行可能ファイルと同じディレクトリにコピーします。


なぜこれがビジュアルスタジオで起こらないのですか?
xRobot、2011年

1
それも行いますが、他のDLLを使用します。例、msvcrt90.dllがない場合、ビジュアルコンパイル済みプロジェクトは開始されません(ただし、通常はシステム全体にインストールされます)
Bruce

6

ご覧ください。それは私の問題を解決しました。

ちなみに間違いなくcompilerフラグなのでしょうか?多分linkerここでより適切な用語ですか?


1
正しい用語の場合は+1!はい、gccリンクオプションへの「リンク」は(静的ライブラリの場合)そのことの微妙な違いでした。
hardmath 2011

5

「libgcc_s_dw2-1.dll」をmake.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-dl​​l.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
ここに回答としてコメントを投稿しないでください。それはスタックオーバーフローの動作方法ではありません。また、「あなた」の代わりに「u」を使用し、「because」の代わりに「cos」を使用することもできます。ここではチャットスピークは特に禁止されています。
貧弱

4

設定>>コンパイラとデバッガに移動し、[リンカ設定]タブをクリックして、[その他のリンカオプション]編集コントロールに移動して貼り付けます。「-static-libgcc -static-libstdc ++」にコンパイラフラグオプションはありません。 Code :: Blocksのコンパイラフラグオプションで、これがその問題を解決する方法です。私はここにも解決策を探しに来ました。残りの部分を誤って考え出したのですが、うまくいきました。ファイルは外部のCode :: Blocksからクリック可能になり、デスクトップから直接機能します。


3

そのdllへのパスをPATH環境変数に追加します。


なぜこれがビジュアルスタジオで起こらないのですか?
xRobot、2011年

そのdllへのパスがVisualStudioの[ツール]-> [オプション]-> [プロジェクトとソリューション]-> [VC ++ディレクトリ]-> [実行可能ファイル]にリストされているためと考えられます。Visual Studioは、dllへのパスを検索するときに、こことPATH環境変数を検索します。
Bojan Komazec、2011年

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バージョンを使用することです。

編集を更新:これはすべての人の問題を解決するわけではありません。私が最近これについて発見したもう1つの理由は、他の誰かがコンパイルしたライブラリを使用する場合です。私の場合、それは不適切にコンパイルされたSFMLであり、MinGWの異なるバージョンでコンパイルされたため、存在しないDLLが必要でした。使用する。私はドワーフビルドを使用しましたが、これは別のビルドを使用したので、DLLがどこにもありませんでした。もちろん、静的ビルドだったので、DLLは必要ありませんでした。解決策は、ライブラリの別のビルドを見つけるか、自分でビルドすることです。


0

msys2を使用して、デバッグ環境でプロジェクトのリリースバージョンを実行しようとすると、同じエラーが発生しました。私の問題の解決策は明白です。デバッグシンボルで実行可能ファイルを使用します。


0

CodeBlocksでは、設定...コンパイラ...に移動して、1)青いボックスの2つのアイテム、または2)緑のボックスの1つのアイテムを選択できます。

codeblocksコンパイラ設定


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.