Comment puis-je obtenir pthreads de travail dans Windows?
J'ai été en cours d'exécution dans des erreurs telles que celles mentionné ci-dessous lorsque vous essayez de compiler le code contenant les pthreads
warning: return type defaults to 'int' [-Wreturn-type]|
|In function 'print_message_function':|
warning: control reaches end of non-void function [-Wreturn-type]|
| undefined reference to `_imp__pthread_create'|
| undefined reference to `_imp__pthread_create'|
| undefined reference to `_imp__pthread_join'|
| undefined reference to `_imp__pthread_join'|
Je suis à court de GCC sous Windows 7, mais j'ai installé mingw. J'utilise l'IDE Code::Blocks et sélectionnez "compiler fichier en cours". Voici une capture d'écran de l'éditeur de liens paramètres, je suis à une perte ici
Mise à JOUR: j'ai ajouté -pthread
pour les "Autres options du linker" et ça fonctionne mieux. Il y a toujours des problèmes. Quand je compile il dit
|In function 'print_message_function':|
warning: control reaches end of non-void function [-Wreturn-type]|
et quand je vais pour l'exécuter CodeBlocks dit "il semble que le programme n'a pas encore été créé" et quand je clique sur "build" je me suis montré cette erreur
mingw32-g++.exe -o "SimpleExample.exe" "SimpleExample.o" -static-libgcc -static-libstdc++ -pthread
mingw32-g++.exe: error: unrecognized option '-pthread'
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 1 warnings (0 minutes, 0 seconds)
Comment puis-je résoudre ce problème? Je veux construire/test sur Windows, mais le programme s'exécuter sur un environnement Unix. Quelle est la différence entre les compiler dans un IDE?
-pthread
dans la ligne de commande.Ceux sont des erreurs d'édition de liens, pas d'erreurs du compilateur.
J'ai mis à jour la description. Je suis en utilisant la valeur par défaut des blocs de code à compiler.
Je n'ai jamais utilisé des blocs de code, mais il semble que vous êtes en manque une référence à libpthread. Essayez d'ajouter
-pthread
pour les autres options du linker.Je suis aussi à l'aide de CodeBlocks. Avec la solution que vous avez accepté me fait penser que ça a fonctionné pour vous et non, il fonctionne très bien. Vieux problème, je sais. Pourriez-vous ajouter la solution dans le fond de votre Question? La solution semble être dans un Linux ou Mac solution de l'environnement. Serait super que je vais avoir des ennuis avec les threads dans CodeBlock et d'obtenir les mêmes erreurs. J'ai installé le pthread.h manuall, mais vous ne savez pas où mettre le *.les fichiers dll. Merci!
OriginalL'auteur Celeritas | 2013-10-09
Vous devez vous connecter pour publier un commentaire.
Il est
-lpthread
, pas -pthread.Edit:
Les bibliothèques peuvent être ajoutés à la ligne de compilation dans un couple des manières. Si nous avons un fichier appelé (par exemple)
/usr/lib/libpthread.so
nous pourrions inclure le fichier comme ceci:ou bien:
Depuis
/usr/lib
est un répertoire standard, nous n'avons pas l'habitude d'exiger de l'-L
option. Au moment de l'exécution, nous pourrions avoir à définir une variable d'environnement:mais encore une fois, les bibliothèques standard par défaut, de sorte que vous n'avez pas à utiliser cela, sauf si vous êtes la construction de votre propre ou à l'aide de la 3e partie des bibliothèques.
-l<nom de la bibliothèque> est l'éditeur de liens option pour ajouter une bibliothèque. Le compilateur et l'éditeur de liens de la documentation répertorie les options disponibles.
Je l'ai fait avant. Je suis d'accord que ce n'est pas particulièrement bien documenté - il est facile de trouver que si vous la connaissez déjà! Je vais ajouter quelques explications.
Serait l'amour de la documentation de Windows. Cela semble être en utilisant des répertoires sous Linux ou Mac (par exemple, /usr/lib/...) alors que dans Windows est somethign comme C:/.../MinGW/lib/
OriginalL'auteur cdarke
cette réponse tardive mais ... il a travaillé pour moi, j'ai donc décidé de le partager.
ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip
C:\ProgramFiles\CodeBlocks\MinGW\include
et les fichiers de bibliothèque dans
C:\ProgramFiles\CodeBlocks\MinGW\lib
(myprojects/bin/debug dans mon cas)
Paramètres -> Compiler -> Linker Settings -> Autres Options du Linker
de mon Code::Blocks IDE
Espère que cela peut vous aider.
Cela a fonctionné pour moi. Demandé pour Windows et a obtenu de réponses Windows.
Cela fonctionne très bien mais j'ai une redéfinition d'erreur(stackoverflow.com/questions/33557506/...). La solution consiste à inclure la macro suivante, avant d'intégrer le pthread fichier d'en-tête dans votre programme: #define HAVE_STRUCT_TIMESPEC
OriginalL'auteur Mario
Votre
main
ne retourne pas de valeur. Ajouterreturn 0;
à la fin demain
.Vous avez besoin pour faire le lien avec la bibliothèque de threads. Ajouter
-lpthread
à la ligne de commande liens.De nombreuses fonctions, comme par exemple celles de la partie de la norme C, et souvent assez quelques plate-forme spécifique à la fonction fait partie d'une bibliothèque qui est toujours liée (habituellement appelé le "C library", la libc ou C de l'exécution, et de même pour la bibliothèque C++ standard). Dans le cas général, vous devez indiquer explicitement à l'éditeur de liens qui bibliothèques vous avez besoin de lien en bien, et pthreads vit dans sa propre bibliothèque.
Vous l'avez mentionné, "Add-lpthread à l'éditeur de liens de ligne de commande". Comment fait-on cela? Comment fait-on Ajouter -lpthread à l'éditeur de liens en ligne de commande?
Si vous ne lancez pas l'éditeur de liens séparément, il suffit d'ajouter
-lpthread
à la ligne de commande du compilateur le compilateur va de l'avant à l'éditeur de liens.Je vous remercie. Je ne sais pas la différence entre -lpthread et -lpthreadGC2, mais pour une raison quelconque Mario de la solution à l'aide d'-lpthreadGC2 œuvres et -lpthread ne le fait pas. Déroutante.
OriginalL'auteur Klas Lindbäck
Voici ce qui se passe actuellement comme de maintenant, quand à l'aide de Gestionnaire d'Installation de MinGW (mingw32 le gestionnaire de package pour windows) sous Windows avec les paquets suivants installés:
ERREUR: gcc 5.3.0 d'échec de la liaison pthread par exemple
SOLUTION: inclure des sources de MinGW Gestionnaire de Paquet, trop, c'est à dire également sélectionner
MinGW 4.9.2 ne pas montrer cet effet. GCC 5.4 sur Ubuntu ne nécessite pas l'pthread sources pour compiler le code.
Cela m'a aidé à sortir, tandis que d'autres essais (à l'aide de mingw32-libpthread-vieux ou la configuration des paramètres de l'éditeur de liens) a échoué.
OriginalL'auteur Gizmo0001