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

C Discussion :

C - Pthread : problème de librairie avec bcc


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 48
    Par défaut C - Pthread : problème de librairie avec bcc
    Bonjour,

    je travaille sous Borland C++ 5.0.2 / Win XP SP3.

    Je souhaite mettre en oeuvre plusieurs threads. J'ai trouvé des infos intéressantes sur ce forum ainsi que des tutoriels fournissant des exemples.

    Mais avant d'expérimenter, il faut au préalable disposer d'une dll et d'un .lib. Et là ça se complique ... J'ai téléchargé le fichier pthreads-w32-2-8-0-release.exe depuis le site http://sourceware.org/pthreads-win32/.

    A priori, pour le compilateur Borland, il faut construire les fichiers pthreadBC.dll et pthreadBC.lib. J'ai donc utilisé la commande "make -fBmakefile" (depuis l'invit de commande Ms-dos) comme indiquée dans README.Borland mais j'ai une erreur (incorrect command line option : /q) et je ne trouve pas les fichiers.

    Je suis à la frontière de mes connaissances en la matière si vous avez des idées et conseils je suis preneur (j'ai cherché les versions déjà construites du .dll et .lib mais sans succès).

    Merci d'avance.

    Avec mes excuses si ce sujet doit être affecté à la rubrique POSIX ...

    Le papat

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    Plusieurs paquets sont disponibles, le fait que tu essayes de recreer la dll me laisse penser que tu n'as pas téléchargé le paquet avec les dll précompilés ( ftp://sourceware.org/pub/pthreads-win32/dll-latest ).
    Ensuite, je sais pas comment ça marche dans Borland, mais faut surement lui indiquer le chemin des headers et du fichier .lib et ensuite mettre le .dll dans le dossier d'execution du programme (ou dans le dossier system32 mais bon..)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 48
    Par défaut
    Hello et merci pour ce premier retour,

    j'ai telecharge les fichiers .h, .lib et .dll depuis ton lien.
    J'ai deplace les .h dans le rep \include associe a mon projet .ide.
    J'ai deplace les .lib dans le rep \lib associe a mon projet .ide.
    J'ai lie le fichier pthreadVCE2.lib au projet.

    J'ai depose les differentes dll dans le repertoire de mon projet.

    Quand je compile le programme principal ci-dessous trouve sur un site tutoriel

    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
    #include <stdio.h>
     
    #include <pthread.h>
     
    static void *task_a (void *p_data)
    {
       puts ("Hello world A");
     
       (void) p_data;
       return NULL;
    }
     
    static void *task_b (void *p_data)
    {
       puts ("Hello world B");
     
       (void) p_data;
       return NULL;
    }
     
    int main (void)
    {
       pthread_t ta;
       pthread_t tb;
     
       puts ("main init");
     
       pthread_create (&ta, NULL, task_a, NULL);
       pthread_create (&tb, NULL, task_b, NULL);
     
    #if 1
       pthread_join (ta, NULL);
       pthread_join (tb, NULL);
    #endif
     
       puts ("main end");
     
       return 0;
    }
    je n'ai pas d'erreur mais une serie de 11 warnings :
    Undefined structure 'pthread_attr_t_'
    Undefined structure 'pthread_key_t_'
    Undefined structure 'pthread_mutex_t_'
    Undefined structure 'pthread_muttexattr_t_'
    Undefined structure 'pthread_cond_t_'
    Undefined structure 'pthread_condattr_t_'
    Undefined structure 'pthread_rwlock_t_'
    Undefined structure 'pthread_rwlockattr_t_'
    Undefined structure 'pthread_spinlock_t_'
    Undefined structure 'pthread_barrier_t_'
    Undefined structure 'pthread_barrierattr_t_'

    et quand je 'build' ou make l'executable, j'ai l'erreur
    'C:\BC5|LIB|PTHREADVCE2.LIB' contains invalid OMF record, type 0x21.
    Idem quand j'essaie tous les .lib fournis.

    Sur le site, ils indiquent qu'il est important de bien choisir la librairie a utiliser (qui depend du compilateur a priori). En particulier le fichier README.BORLAND mentionne :

    The other file is a makefile suitable for use with Borland's compiler
    (run "make -fBmakefile" in the directory). It builds a single version
    of the library, pthreadBC.dll and the corresponding pthreadBC.lib
    import library, which is comparable to the pthreadVC version
    Mais quand j'essaie la commande make je rencontre l'erreur mentionne dans mon precedent post. Et donc le .lib et le .dll ne sont pas produits.

    J'espere avoir ete precis et que ca inspirera les lecteurs

    Lepapat

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 48
    Par défaut
    En fait mon compilateur ne reconnait pas certaines options de compilation (-q et -tWM).

    Je travaille avec le compilateur Borland C++ 5.0.2 (pas le builder) et je me demande si je ne suis pas limite : est - il est possible de faire du multi thread avec ce compilateur finalement ?, ...

    J'ai a ma disposition Builder 4 mais il est prevu pour Win95/98/NT. Est ce que cela veut dire qu'il n'est pas compatible avec XP ?

    LePapat

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par LePapat26 Voir le message
    Mais quand j'essaie la commande make je rencontre l'erreur mentionne dans mon precedent post. Et donc le .lib et le .dll ne sont pas produits.
    Mais pourquoi chercher à compiler la .dll si elle est deja fournie?

    Ce que tu voudrais faire c'est utiliser la dll et non la créer, et pour cela il faut les headers (pour les types, prototypes des fonctions etc...) et un .lib (je sais plus pourquoi, pas un expert dev windows), c'est tout (pour la compilation de tes programmes du moins).

    Le README est peut etre un README generique qui doit s'appliquer au package avec les sources et contient donc aussi les indications pour générer la dll

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 48
    Par défaut
    Mais pourquoi chercher à compiler la .dll si elle est deja fournie?
    mes premiers tests avec les .dll et .lib d'origine n'ont pas ete concluants.
    De plus, j'ai trouve sur plusieurs forums que l'erreur 'contains invalid OMF record, type 0x21' signifie
    This error usually occurs when you try to link with a LIB file or an OBJ file that is not compatible with Borland's OMF file format
    .

    donc une des solutions pour contourner le probleme est de se referer a ce qui est indique dans README.BORLAND, a savoir la recompilation de la dll.

    Une autre solution est d'utiliser la fonction implib de borland pour construire un .lib compatible. Ce que j'essaie de faire en ce moment. Mais le README.BORLAND indique
    (While I'm on the subject, the reason Borland users should recompile
    the library, rather than using the impdef/implib technique suggested
    previously on the mailing list, is that a) the errno constants are
    different, so the results returned by the pthread_* functions can be
    meaningless, and b) the errno variable/pseudo-variable itself is
    different in the MS & BCC runtimes, so you can't access the
    pthreadVC's errno from a Borland C++-compiled host application
    correctly - I imagine there are other potential problems from the RTL
    mismatch too.)
    texte qui pour moi s'apparente a du mandarin... et je ne parle pas le madarin

    LePapat

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 48
    Par défaut
    Je viens de tester la solution implib detaillee ici http://sources.redhat.com/ml/pthread.../msg00062.html.

    J'ai toujours mes 11 warnings a la compilation (cf ci - dessus), ainsi que 2 erreurs :

    Error : Unresolved external '_pthread_create' referenced from <monrepdetravail>\EXEMPLE-1.obj

    Error : Unresolved external '_pthread_join' referenced from <monrepdetravail>\EXEMPLE-1.obj

    Les erreurs de 'compatibilite' de la librairie ont forcement disparu.

    LePapat

Discussions similaires

  1. Problème de librairie avec Launch4j
    Par AASProni dans le forum Général Java
    Réponses: 1
    Dernier message: 05/06/2014, 18h06
  2. Problème de librairie avec code blocks sous Linux
    Par philmor34 dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 31/10/2008, 13h25
  3. problème de débutant avec la librairie glut sous dev C++
    Par mozillo3625 dans le forum Windows
    Réponses: 0
    Dernier message: 30/11/2007, 22h56
  4. Réponses: 1
    Dernier message: 09/10/2007, 06h44
  5. Problème de linkage avec la librairie DevIl
    Par Drannor dans le forum DevIL
    Réponses: 1
    Dernier message: 18/01/2006, 23h05

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