c - Hvordan installerer jeg pthread\_win32 (Windows pthread/posix trådbibliotek) til Visual Studio 2005?

Indlæg af Hanne Mølgaard Plasc

Problem



Bare for at være klar - jeg har søgt på dybden af ​​internettet og tilbage for at få oplysninger om, hvordan man gør dette


Jeg søger efter hjælp med at oprette pthread\_Win32 for at arbejde med Visual Studio 2005. Jeg har programmering i C, og jeg har en række multithreadede opgaver at skrive ved hjælp af pthread.h. Men da pthread er indfødt til unix, skal jeg skrive hele min kode, ftp den og derefter ssh til min klasse 'remote unix system til at køre den. Det gør udviklingen tager så meget længere, og det er utrolig ineffektivt. Jeg elsker (mere end noget andet) for at kunne få det til at fungere på min win32-maskine, så jeg kan udvikle sig i en visuel studie, som jeg har gjort i nogen tid.


Jeg har installeret filen pthread.lib og pthread.h i de respektive lib/header-mapper, hvor alle de andre filer er. DLL'en derimod (det faktiske bibliotek), har jeg placeret i c: \ windows \ system32. Jeg har forsøgt at tilføje DLL som en afhængighed (højre klik projekt -> referencer -> Tilføj ny reference), men som andre har sagt, er alt, hvad jeg får, en tom dialogboks uden mulighed for at tilføje DLL-filer eller noget. Det ser ud til at genkende overskriftsfilen, men jeg får disse fejl, når jeg kompilerer:


1> Sammenkædning ...


1> main.obj: fejl LNK2019: uløst eksternt symbol \_ imp \_pthread\_join henvist til i funktion \_main


1> main.obj: fejl LNK2019: uløst eksternt symbol \_ imp \_pthread\_create refereret i funktion \_main


1> main.obj: fejl LNK2019: uløst eksternt symbol \_ imp \_pthread\_exit refereret i funktion \_fcount


Fra min forskning har jeg fastslået, at dette er et problem med DLL'en, og jeg antager, at det ikke kan finde definitionerne på de funktioner, jeg har henvist til i min kode. Jeg har søgt højt og lavt, og jeg kan ikke synes at finde ud af nogen måde at overvinde dette problem. Jeg har tilføjet katalogerne til lib/header-filerne til min linker, bare i tilfælde, men det løste ikke problemet. Jeg skal gøre noget i visuelt studie for at specificere, at jeg har brug for pthreadVC2.dll som projektafhængighed - og det ser ud til at være umuligt (og ekstremt frustrerende) på dette tidspunkt.


Hvilke visdomsord?


Mange tak

Bedste reference


Jeg har været igennem dette problem for nylig.
Det ser ud til, at \_\_imp \_\_ præfikset er prepended til funktionsnavnet, hvis pthread.h er inkluderet i dynamisk linketilstand.
Du skal blot tilføje PTW32\_STATIC\_LIB definere til dit projekt eller din kildekode, før du inkluderer pthread.h , løse problemet.


#define PTW32\_STATIC\_LIB
#include <pthread.h>


Selv om jeg ikke er helt over, da Visual Studio nu forsøger at linke med \_ [[FuncName]] i stedet for [[FuncName]]


I visuel studie synes funktionen at blive erklæret forskelligt, om du vil forbinde dem statisk (.lib) eller dynamisk (.dll).


For at definere en funktion, vil du linke dynamisk:


\_\_declspec (dllimport) int myFunc(int myArgs) ;


For at definere funktion, eksporterer du til dynamisk linking:


\_\_declspec (dllexport) int myFunc(int myArgs) ;


Og det enkleste, at definere en funktion, du vil forbinde statisk:


int myFunc(int myArgs) ;


[[EDIT]]


Jeg fortsætter mine undersøgelser og gik igennem dette på MS Hjælp.
Det ser ud til, at for at undgå \_ [[FuncName]] effekten er det nødvendigt at definere en statisk linket biblioteksfunktion med følgende: [8]


int \_\_cdecl myFunc(int MyArgs) ;

Andre referencer 1


Har du tilføjet pthreadVC.lib (eller hvilken bestemt lib du har brug for) til projektegenskaben:


Linker/Input/Additional Dependencies


Det er ikke nok at bare have lib-filen i en bestemt mappe, linkeren skal fortælle at bruge den som input.

Andre referencer 2


Det er ikke tilstrækkeligt at tilføje pthreadVC2.lib til linker-listen.
Du skal også tilføje addtional lib som pthreadVCE2.lib og pthreadVSE2.lib.


Jeg står over for samme problem, men så besluttede jeg det ved at tilføje disse filer.