Lors de la compilation avec MinGW, je dois copier certains fichiers DLL du répertoire bin de MinGW avant que le fichier exe ne soit exécuté (même si vous utilisez "-static" et/ou "-static-libstdc ++".) Comment puis-je changer cela ? Existe-t-il une version spéciale de MinGW que je dois utiliser? En fin de compte, je veux pouvoir exécuter le programme avec rien d'autre que l'exécutable du répertoire (et aucune variable d'environnement Windows définie.) Ces fichiers sont les suivants:
Et voici la liste complète des pas jachères:
Voir le message
Hello World!
Edit: Ma ligne de commande est la suivante:
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
Avec tous les fichiers DLL mentionnés ci-dessus requis. Et, juste pour être sûr, le code est:
// main.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
Vos commandes sont fausses!
Accédez au répertoire dans lequel se trouve votre fichier main.cpp et procédez comme suit.
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
vous n'aurez alors plus besoin de copier les DLL (pour votre programme Hello World).
Autres notes:
Les instructions d’installation de MinGW recommandent le réglage
c:\minGW;c:\MinGW\bin;
à la variable d'environnement PATH.
Normalement le
-static -static-libgcc -static-libstdc++
les options de l'éditeur de liens devraient fonctionner (essayez les 3 en même temps). Mais pas pour libwinpthread-1.dll
.
Essayez également de clean
avant de recompiler.
Il n'y a pas de commande "-static-quelque chose".
Seules les bibliothèques standard libgcc et libstdc ++ peuvent être définies sur la liaison statique.
Pour les autres bibliothèques, vous devez tout d'abord passer à la liaison statique avec "-static", puis répertorier les bibliothèques à inclure avec des commandes distinctes, c'est-à-dire "-lpthread".
Les utilisateurs de Cmake devraient essayer d’ajouter:
set(CMAKE_CXX_STANDARD_LIBRARIES "-static-libgcc -static-libstdc++ -lwsock32 -lws2_32 ${CMAKE_CSS_STANDARD_LIBRARIES}")
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive")
-static-libgcc
peut être une mauvaise idée si des exceptions sont utilisées. la documentation sur les options de lien indique que
Il existe plusieurs situations dans lesquelles une application doit utiliser le fichier libgcc partagé au lieu de la version statique. Le plus commun d'entre eux C'est quand l'application souhaite lancer et attraper des exceptions sur différentes bibliothèques partagées. Dans ce cas, chacune des bibliothèques en tant que ainsi que l’application elle-même doit utiliser la libgcc partagée.
Les gens sont toujours confrontés à ce problème, dans Code :: Blocks essaie de reconstruire le projet. J'ai eu le même problème, mais la reconstruction de mon projet a aidé à résoudre le problème.