Code :: Blocksを使ってC++で簡単なプログラムを作成しました。
Code :: Blocksから実行した場合、正しく機能します。しかし、実行可能ファイルをダブルクリックして実行すると、ウィンドウに次のメッセージが表示されます。
Libgcc_s_dw2-1.dllがコンピューター上にないため、プログラムを開始できません。
この問題を解決するためにプログラムを再インストールしてください。
それで、問題は何ですか?修正するにはどうすればいいですか。
これは、Microsoft Visual Studioの設定ではなく、MinGW/gccコンパイラの問題であると思います。
libgcc_s_dw2-1.dll
はコンパイラのbinディレクトリになければなりません。実行時リンクのためにこのディレクトリをPATH環境変数に追加することも、コンパイラフラグに "-static-libgcc -static-libstdc ++"を追加して問題を回避することもできます。
実行可能ファイルを配布する予定の場合は、後者がおそらく最も意味があります。自分のマシンでのみ実行する予定の場合は、PATH環境変数を変更するのが魅力的なオプションです(実行可能ファイルのサイズを抑えるため)。
更新:
Greg Treleavenからのフィードバックに基づいて(下記のコメントを参照)、私は以下へのリンクを追加しています。
[[Code :: Blocks "Project build options"のスクリーンショット]]
後者の説明には、-static-libgcc
および-static-libstdc++
リンカオプションが含まれています。
Eclipseでは、プロジェクトのプロパティ> C/C++ビルド>設定> MinGW C++リンカ>その他の下にあります。
一番上の「リンカフラグ」にそれを追加しなければなりません。他にはありません。それから再構築してください。
これらを静的にリンクすると、最適化しても最大1,400kbのサイズに拡大することがわかりました。共有DLLをコピーするだけの場合と比較して、277 KB大きくなります。それはすべてをUPXした後でも同様に388kb大きいです。非常に負け/負けです。エンドユーザーがそれらを他の場所にインストールしている場合は削除するかどうかを決定できるので、DLLを含めるだけです。
コード::ブロック:設定 - >コンパイラ - >リンカ設定 - >その他のリンカオプションに '-static'を追加。
あなたのPC上でそのdllを見つけ、あなたの実行ファイルがあるのと同じディレクトリにそれをコピーしてください。
"libgcc_s_dw2-1.dll"をmake.exeだったものにコピーします。 (Msysを使用している場合は、\ msys\binにコピーします)make.exeへのパスがenvに設定されていることを確認してください。 PATH(make.exeが "bin"フォルダにある場合、おそらくmsysがあるので、\ msys\bin)コンパイル、実行、デバッグなど。
私のコンパイラに "g ++"の代わりに "gcc"を使うことでこれを克服することができました。私はこれがほとんどの人にとっての選択肢ではないことを知っています、しかし私はそれを回避策の選択肢として言及することを考えました:)
あなたが実行しようとするすべてのプログラムがあなたのマシン上でその問題を抱えていないように、あなたは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キーを押します。
単にSettings >> Compiler and Debuggerに行き、そしてLinker Settingsタブをクリックし、そして「Otherリンカーオプション」編集コントロールに行き、そして貼り付けなさい:それに「-static-libgcc -static-libstdc ++」、コンパイラーフラグオプションはないCode :: BlocksのCompiler Flagsオプションにあるので、それがその問題を解決する方法なので、ここでも解決策を探していて、 "-static-libgcc -static-libstdc ++"について投稿した一人の男が正しいアイデアを出しました。私は一種の残りを偶然に考え出したが、それはうまくいった、ファイルは今Code :: Blocksの外側からクリック可能で、デスクトップから正しく動作する。
も を参照してください。それは私の問題を解決しました。
ところで、それは間違いなくcompiler
フラグですか?たぶんlinker
がここでより適切な用語ですか?
そのdllへのパスをPATH環境変数に追加します。
MinGW http sourceforge.netツリーに移動します。 Home/MinGW/Base/gcc/Version 4(または使用しているバージョン)/ gcc-4(version)/の下にgcc-core-4.8.1-4-mingw32-dll.tar.lzmaのようなファイルがあります。 。それを解凍して、libgcc_s_dw2-1.dllやその他のdllがあるbinフォルダーに移動します。必要なものをコピーしてbinディレクトリに貼り付けます。
他のリンカオプションに "-static"を追加するとこの問題は解決します。私がこれを別のシステムでテストした後も同じ問題を抱えていたのですが、私自身ではそうではありませんでした。
もう1つ注意しておくと、DLLを実行可能ファイルと同じフォルダにコピーすることは、静的リンクの概念を無効にするため解決策ではありません。
他の選択肢は、この問題を解決するMinGWのTDMバージョンを使用することです。
更新編集:これは皆のための問題を解決しないかもしれません。私が最近これを発見したもう1つの理由は、あなたが他の誰かによってコンパイルされたライブラリを使うときです。私の場合は不適切にコンパイルされたSFMLでしたので別のバージョンでコンパイルされたので存在しないDLLが必要です。私が使っているものよりもMinGW。私はドワーフビルドを使用しますが、これは別のビルドを使用していたので、DLLはどこにも持っていませんでした。解決策は、ライブラリの別のビルドを探すか、自分でビルドすることです。
Msys2を使った作業デバッグ環境で自分のプロジェクトのリリース版を実行しようとしたときに同じエラーが発生しました。私の問題に対する解決策は明白です:デバッグシンボル付きの実行可能ファイルを使用してください。