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

  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

  8. #8
    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
    Ok, désolé, maintenant que j'y pense, les .lib c'était peut etre que pour VisualC.
    Je n'ai pas d'idée pour ton problème de compilation de dll, ça devient assez spécifique à l'ultilisation de BCC
    Pourquoi pas essayer d'autres compilateurs/EDI ? Voir la section concernée http://www.developpez.net/forums/f65...pilateurs-etc/

  9. #9
    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,

    les .lib sont valables pour Borland egalement. J'utilise les dll et lib fournies par un fournisseur pour piloter du materiel.

    Je vais attendre pour d'autres pistes avant d'envisager de changer d'EDI.

    J'ai l'impression que je n'ai pas le compilateur adequat pour compiler le makefile fourni pour creer la dll specifique a Borland. En en tete du fichier, il est mentionne :

    This makefile is compatible with BCB make
    .

    Cela veut - il dire qu'il faut C++ Builder et pas le simple compilateur borland c++ ? En effet, des options du make comme -q -tWM ne sont pas reconnues par mon compilateur actuel.

    En tout cas ce fil de discussion me permet d'approfondir le sujet et d'en avoir une meilleure comprehension. meme si je ne sais pas comment regler le probleme

    LePapat

  10. #10
    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,

    Donc j'ai regardé ce README, il disent bien de compiler en utilisant "Bmakefile" (donc commande "make -fBmakefile")

    Tu l'as fait depuis une invite de commande, mais après tout dépend du compilateur installé sur le système (ç a d, dont la panoplie de binaires est dans le PATH)
    Imaginons qu'il y ait un autre compilateur intégré au système, peut être qu'il prendrait çuilà et non celui de Borland

    N'y a t il aucun moyen d'executer une commande make depuis l'EDI?

  11. #11
    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
    Re-Hello,

    j'ai cherche sans succes le moyen de lancer la commande make depuis l'EDI.

    Par contre, en lancant le make depuis la fenetre DOS, les infos affichees me laissent penser que c'est le compilateur borland bcc.exe par defaut. Donc j'ai refait le test avec celui la, puis j'ai modifie le Bmakefile en rajoutant la variable CC = bcc32 pour appeller le compilateur bcc32.exe (une idee comme ca, pour le fun, j'ai vu que cet exe etait aussi dans le rep \bin\ de Borland. Donc reflexe instinctif : bcc32. exe, ca fait plus recent que bcc.exe, donnons lui sa chance )

    Echec dans les 2 cas. J'ai joint une capture d'ecran decrivant ce que m'affiche la fenetre dos suite a l'execution du 'make'.

    D'autres forums abordent une autre solution pour utiliser des dll sans se preoccuper des problemes de .lib : la fonction LoadLibrairy().

    Je vais etudier celle - ci en parallele, derniere option disponible au demeurant.

    A+

    LePapat
    Images attachées Images attachées  

  12. #12
    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
    Ok, donc à mon avis le makefile fourni par pthreads-win32 est prévu pour un compilateur borland plus récent (ou moins récent)
    Si c'est juste l'option "/q" qui bloque, peut etre essayer sans. Si c'est comme le "-q" dans d'autres logiciels en ligne de commande unix, ça veut juste dire "mode silencieux (quiet)", ça affiche rien sauf trucs importants (erreurs).

  13. #13
    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
    j'ai enlevé l'option -q, ce qui m'ammene à une autre option non reconnue -tWM, qui est synonyme de WM comme indiqué dans plusieurs docs. Donc j'ai essayé :

    sans -q avec -WM -> erreur d'option non reconnue
    sans -q sans -tWM -> la compilation se poursuit mais un nouveau groupe d'erreurs (dues au fait qu'il n'y avait pas -tWM, je ne me souviens plus de mémoire son usage d'ailleurs).

    Comme tu l'as indiqué auparavant, le compilateur doit être trop ancien pour ce makefile.

    Je vais tenter le loadlibrary et puis on va s'arrêter là

    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