Bonjour, je me (re)mets à la programmation concurrente et j'ai choisi d'utiliser la librairie pthread, principalement pour suivre ce tutoriel => http://franckh.developpez.com/tutoriels/posix/pthreads/ (et accessoirement pour la portabilité et la licence )
Je souhaiterai faire une édition de lien static avec cette librairie et évidement je n'y arrive pas. Voici comment je procède :
1) compilation de la librairie static à l'aide du makefile fourni et de l'invite de commande de visual studio :
log du make :
Code : Sélectionner tout - Visualiser dans une fenêtre à part nmake clean VC-static
bref ça a l'air de compiler correctement, je la mets à la place de celle d'origine dans le dossier "Pre-built.2\lib\x86"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 if exist *.obj del *.obj if exist *.def del *.def if exist *.ilk del *.ilk if exist *.pdb del *.pdb if exist *.exp del *.exp if exist *.map del *.map if exist *.o del *.o if exist *.i del *.i if exist *.res del *.res cl /I. /DHAVE_PTW32_CONFIG_H /O2 /Ob2 /W3 /MD /nologo /DPTW32_BUILD_INLINED /DPTW32_STATIC_LIB /D__CLEANUP_C -c pthread.c pthread.c rc /dPTW32_ARCH /dPTW32_RC_MSC /d__CLEANUP_C version.rc Microsoft (R) Windows (R) Resource Compiler Version 6.3.9600.17029 Copyright (C) Microsoft Corporation. All rights reserved. if exist pthreadVC2.lib del pthreadVC2.lib lib pthread.obj version.res /out:pthreadVC2.lib Microsoft (R) Library Manager Version 12.00.21005.1 Copyright (C) Microsoft Corporation. All rights reserved.
2)utilisation de la librairie (j'utilise code::blocks), c'est ici que ca foire
je vous colle directement le log*:
et aussi le source*:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 cl.exe /nologo /EHc /EHs /W3 /IC:\pthreads-w32-2-9-1-release\Pre-built.2\include /I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include" /I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" /I"C:\Program Files (x86)\Windows Kits\8.1\include\um" /I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" /c PThreadTestMain.c /FoMSVC32_Release\obj\PThreadTestMain.obj PThreadTestMain.c link.exe /nologo /LIBPATH:C:\pthreads-w32-2-9-1-release\Pre-built.2\lib\x86 /LIBPATH:C:\Windows\Microsoft.NET\Framework\v4.0.30319 /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib" /LIBPATH:"C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x86" /LIBPATH:"C:\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral" /LIBPATH:"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1\ExtensionSDKs\Microsoft.VCLibs\12.0\References\CommonConfiguration\neutral" /out:MSVC32_Release\bin\PthreadTest.exe pthreadVC2.lib MSVC32_Release\obj\PThreadTestMain.obj PThreadTestMain.obj : error LNK2019: symbole externe non résolu __imp__pthread_create référencé dans la fonction _main PThreadTestMain.obj : error LNK2019: symbole externe non résolu __imp__pthread_join référencé dans la fonction _main MSVC32_Release\bin\PthreadTest.exe : fatal error LNK1120: 2 externes non résolus
bon, qu'est ce que j'ai mal fait ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 #include <stdio.h> #include <pthread.h> /*routine du thread */ void * th_routine(void * pt ) { printf("routine du thread \n"); return NULL; } int main (void) { printf("Creation d'un thread"); pthread_t my_thread; /* déclaration d'un pointeur sur la routine du thread */ void * (*pt_th_routine) (void *) = &th_routine; int ret = pthread_create (&my_thread, NULL, pt_th_routine, NULL); /* si la création du thread a réussi */ if (ret==0) { int ret_join; ret_join = pthread_join (my_thread, 0); /* si pas d'erreur lors du join */ if (!ret_join) { printf("le thread s'est correctement deroule \n"); } /* erreur lors du join*/ else { printf("erreur lors du join \n"); } } /* si la création du thread a échoué */ else { printf("Echec de la création du thread \n"); } return 0; }
J'ai oublier de préciser que j'arrive a faire fonctionner ce bazar avec la version dynamique de la librairie en mettant la DLL qui va bien ou il faut, mais je déteste faire des exécutables qui ont besoin de DLL partout.
ps : desolé pour les "*:", j'avais commencé par écrire mon post sur libre office et tout les espace insécable ont été remplacé par des * , j'ai la flemme de tout corriger.
Partager