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
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.
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"

2)utilisation de la librairie (j'utilise code::blocks), c'est ici que ca foire

je vous colle directement le log*:

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
et aussi le source*:
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;
}
bon, qu'est ce que j'ai mal fait ?

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.