[解決済み] MinGW .exe は、コードに関係なく、いくつかの gcc dll を必要としますか?
質問内容
MinGWでコンパイルする場合、MinGWのbinディレクトリから特定のdllファイルをコピーしないとexeが実行されません("-static"や"-static-libstdc++"を使用してもです)。 どうすれば変更できますか?私が使用しなければならないMinGWの特別なビルドがあるのでしょうか?最終的には、ディレクトリにexe以外何もない状態でプログラムを実行できるようにしたいのです(Windows環境変数の設定もありません)。
- libstdc++-6.dll
- libgcc_s_seh-1.dll
- libwinpthread-1.dll
そして、以下が私が行った手順の完全なリストです。
- Code::Blocksを開く
- File->New->Project->Console" を選択します。
- プロジェクト「"Hello World"」のプロジェクト設定を入力します。
- プロジェクトを右クリック->ビルドオプション...->Hello World (Root target)->Other Options
- すでに設定されている "-fexceptions" の下に "-static" (または "-static-libstdc++") と入力します。
- CTRL-F9 : プロジェクトをビルド(実行なし)
- Windowsエクスプローラで、ビルドされた "Hello World.exe" ファイルに移動し、実行します。
- Error: libstdc++-6.dll is missing from your computer.".というメッセージが表示されたら、"OK"をクリックしてください。
- MinGW/bin/ディレクトリから "libstdc++-6.dll" を "Hello World.exe" ディレクトリにコピーしてください。
- Hello World.exeを実行します。
- Error: libgcc_s_seh-1.dll is missing from your computer." というメッセージに対して "OK" をクリックしてください。
- "libgcc_s_seh-1.dll"を "Hello World.exe" ディレクトリにコピーしてください。
- これを繰り返して、結局 "libwinpthread-1.dll" もコピーしてしまいます。
-
メッセージの表示
Hello World!
編集する。 私のコマンドラインは
g++.exe -Wall -fexceptions -static -static-libgcc -static-libstdc++ -g -static-libgcc -static-libstdc++ -L. -c "C:\Users\______\Desktop\Hello World\main.cpp" -o obj\Debug\main.o
g++.exe -o "bin\Debug\Hello World.exe" obj\Debug\main.o
上記のdllファイルが全て必要な状態。そして、念のため、コードも。
// main.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
解決方法は?
コマンドが間違っている!
のあるディレクトリに移動してください。 main.cpp ファイルがあるので、以下を試してみてください。
g++.exe -Wall -c -g main.cpp -o obj\Debug\main.o
g++.exe -static -static-libgcc -static-libstdc++ -o "bin\Debug\Hello World.exe" obj\Debug\main.o
をコピーすれば、(Hello Worldプログラム用の)DLLをコピーする必要はなくなります。
その他の注意事項
MinGWのインストール手順では、以下の設定を推奨しています。
c:\minGW;c:\MinGW\bin;
をPATH環境変数に設定します。
通常は
-static -static-libgcc -static-libstdc++
のリンカーオプションが動作するはずです(3つとも一度に試してみてください)。しかし
libwinpthread-1.dll
.
また、試しに
clean
を実行してから再コンパイルしてください。
static-something"コマンドはありません。
標準ライブラリのみ libgcc と libstdc++ をスタティックリンクに設定することができます。
その他のライブラリについては、まず "-static" でスタティックリンクに切り替え、次に "-lpthread" などの別コマンドでインクルードするライブラリをリストアップします。
Cmakeユーザは追加してみてください。
set(CMAKE_CXX_STANDARD_LIBRARIES "-static-libgcc -static-libstdc++ -lwsock32 -lws2_32 ${CMAKE_CXX_STANDARD_LIBRARIES}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive")
関連
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] CygwinとMinGWの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】coutはstdのメンバではない
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】Enterキーを押して続行する
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む