Ich kann pthread nicht auf der Windows-Plattform verwenden
-
21-12-2019 - |
Frage
Meine Umgebung ist Windows 8.1 (64 Bit) und ich verwende Visual Studio 2010.
Ich habe alle *.dll-Dateien in system32, SYSWOW64 abgelegt (weil ich Win8 64bit verwende).
und Link-Speicherort, an dem sich die *.lib-Datei für das x64-System mit VC 2010 befindet.
Natürlich füge ich zusätzliche Ordner lib forders hinzu., Ordner einschließen..usw..
Aber wenn ich versuche, das „pthread-used“-Projekt zu kompilieren, ist ein schwerwiegender Fehler aufgetreten.
-Quelle
#include<pthread.h>
#include<stdio.h>
int doit_id,trd_id;
pthread_t trd;
void *doit(void *data){
doit_id = (int)data;
return 0;
}
int main(){
trd_id=pthread_create(&trd,NULL,doit,0);
return (0);
}
-Fehler
1.obj : error LNK2019: unresolved external symbol __imp__pthread_create (referenced in function _main)
C:\Users\~program Location~ : fatal error LNK1120: 1 unresolved externals
Bitte hilf mir
Lösung
Die Tatsache, dass Ihr main()
sucht den Namen __imp__pthread_create
zeigt an, dass Sie Ihr Projekt für ein 32-Bit-Ziel erstellen.
Die 64-Bit-Win32-Pthread-Bibliothek verfügt über ein Importsymbol für pthread_create()
mit dem Namen:
__imp_pthread_create
Die 32-Bit-Win32-Pthread-Bibliothek verfügt über:
__imp__pthread_create
Beachten Sie den zusätzlichen Unterstrich in der 32-Bit-Bibliothek, der der Namenskonvention entspricht, die Sie haben main()
sucht, also ist es ein Hinweis darauf, dass Sie für ein 32-Bit-Ziel bauen.Der zusätzliche Unterstrich ist Teil der Art und Weise, wie x86-Builds Namen in der von der Win32-Pthread-Bibliothek verwendeten cdecl-Aufrufkonvention behandeln.x64 verwendet keine cdecl-Aufrufkonvention (x64 hat nur eine einzige Aufrufkonvention) und Unterstriche werden Symbolen in x64-Builds nicht vorangestellt.
Ich denke, Sie müssen entweder die 32-Bit-Pthread-Bibliothek herunterladen oder erstellen oder Ihre Projektkonfiguration ändern, um für ein 64-Bit-Ziel zu erstellen.