MinGWでコンパイルする場合、exeを実行する前にMinGW binディレクトリから特定のdllファイルをコピーする必要があります(「-static」および/または「-static-libstdc ++」を使用している場合でも)。使用しなければならないMinGWの特別なビルドはありますか?最終的には、ディレクトリ内のexeのみでプログラムを実行できるようにしたい(そして、Windows環境変数は設定しない)。これらのファイルは次のとおりです。
そして、ここに私が休閑しているステップの完全なリストがあります:
メッセージを見る
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")
-static-libgcc
は、例外が使用される場合、悪い考えかもしれません。 リンクオプションのドキュメント
アプリケーションが静的バージョンの代わりに共有libgccを使用する必要がある状況がいくつかあります。これらの最も一般的なのは、アプリケーションが異なる共有ライブラリ全体で例外をスローおよびキャッチしたい場合です。その場合、各ライブラリとアプリケーション自体は共有libgccを使用する必要があります。
Code :: Blocksはプロジェクトを再構築しようとするので、人々はまだこの問題にこだわっています。私も同じ問題を抱えていましたが、プロジェクトを再構築することで問題を解決できました。