IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques, systèmes et outils C Discussion :

[pthreads w32][visual studio] problème d'édition de lien avec la librairie static


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chômage
    Inscrit en
    Juin 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chômage

    Informations forums :
    Inscription : Juin 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut [pthreads w32][visual studio] problème d'édition de lien avec la librairie static
    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.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Chômage
    Inscrit en
    Juin 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chômage

    Informations forums :
    Inscription : Juin 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Bon, j'ai avancé avec mon bordel, j'ai essayé de faire la même manip avec GCC et j'ai obtenue les mêmes erreur...
    j'ai encore fait des recherche et j'ai découvert qu'il fallait declarer la macro "PTW32_STATIC_LIB" lorsque qu'on compile un programme avec la library static.

    du coup maintenant avec GCC ca marche mais avec visual studio j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    cl.exe /nologo  /EHc /EHs /W3 /DPTW32_STATIC_LIB    /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  
    MSVCRT.lib(MSVCR120.dll) : error LNK2005: __errno déjà défini(e) dans LIBCMT.lib(dosmap.obj)
    MSVCRT.lib(MSVCR120.dll) : error LNK2005: _exit déjà défini(e) dans LIBCMT.lib(crt0dat.obj)
    MSVCRT.lib(MSVCR120.dll) : error LNK2005: _free déjà défini(e) dans LIBCMT.lib(free.obj)
    MSVCRT.lib(MSVCR120.dll) : error LNK2005: _malloc déjà défini(e) dans LIBCMT.lib(malloc.obj)
    LINK : warning LNK4098: conflit entre la bibliothèque par défaut 'MSVCRT' et les autres bibliothèques*; utilisez /NODEFAULTLIB:library
    MSVC32_Release\bin\PthreadTest.exe : fatal error LNK1169: un ou plusieurs symboles définis à différentes reprises ont été rencontrés
    qu'est ce que c'est ce bordel ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chômage
    Inscrit en
    Juin 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chômage

    Informations forums :
    Inscription : Juin 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut trouvé
    Ok, les dernière erreur obtenue avec visual studio venait du fait que j'avais oublié de preciser quel version de la "runtime library" il fallait utiliser. L'option par défaut est incompatible avec les option utilisé pour construire la library pthread. le problème a été résolu en rajoutant /MD lors de la compilation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'édition de lien avec Visual Studio 2013
    Par Gouyon dans le forum Visual C++
    Réponses: 22
    Dernier message: 19/05/2014, 14h50
  2. Réponses: 2
    Dernier message: 01/03/2011, 17h11
  3. Problème d'édition des liens avec VC6
    Par nina_geej dans le forum wxWidgets
    Réponses: 11
    Dernier message: 18/03/2009, 17h34
  4. Problème à l'édition des liens avec wxPlotCtrl
    Par _MattU_ dans le forum wxWidgets
    Réponses: 2
    Dernier message: 12/03/2009, 09h40
  5. Problème à l'édition des liens avec BCC55 et Xerces
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/11/2003, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo