Question

Mon environnement est Windows8.1 (64 bits) et utilise Visual Studio 2010.

J'ai mis tous les fichiers *.dll dans system32, SYSWOW64 (car j'utilise win8 64bit.)

et l'emplacement du lien où le fichier *.lib pour le système x64 avec VC 2010.

bien sûr, j'ajoute un dossier supplémentaire lib forders., inclure les dossiers..etc..

mais lorsque j'essaie de compiler le projet "pthread-used", une erreur fatale s'est produite.

-source

#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);
}

-erreur

1.obj : error LNK2019: unresolved external symbol __imp__pthread_create (referenced in function _main)
C:\Users\~program Location~ : fatal error LNK1120: 1 unresolved externals

S'il vous plaît aidez-moi

Était-ce utile?

La solution

Le fait que votre main() cherche le nom __imp__pthread_create indique que vous construisez votre projet pour une cible 32 bits.

La bibliothèque pthread Win32 64 bits possède un symbole d'importation pour pthread_create() avec le nom :

__imp_pthread_create

La bibliothèque pthread Win32 32 bits contient :

__imp__pthread_create

Notez le trait de soulignement supplémentaire dans la bibliothèque 32 bits - qui correspond à la convention de nom utilisée par votre main() recherche, c'est donc une indication que vous construisez pour une cible 32 bits.Le trait de soulignement supplémentaire fait partie de la façon dont les builds x86 traitent les noms dans la convention d'appel cdecl utilisée par la bibliothèque pthread Win32.x64 n'utilise pas de convention d'appel cdecl (x64 n'a qu'une seule convention d'appel) et les traits de soulignement ne sont pas ajoutés aux symboles dans les versions x64.

Je pense que vous devez soit télécharger ou créer la bibliothèque pthread 32 bits, soit modifier la configuration de votre projet pour créer une cible 64 bits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top