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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top