Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Interfaces de programmation
Interfaces de programmation Forum d'entraide sur l'utilisation des API Oracle : Pré-compilateurs, OCI, OCCI, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2011, 14h04   #1
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 25
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 25
Points : 7
Points : 7
Par défaut [PRO*C] Multi-threading avec pthreads

Bonjour,

Voilà quelques jours qu'on me demande d'investiguer dans la programmation multi-threadée en C et plus particulièrement en PRO*C. Comme dans mon message précédent, je suis nouveau dans le monde professionnel et j'ai donc aucune expérience avec ce genre de technologie.

Les threads et la gestion de ceux ci n'est pas un problème. J'en ai déjà fait à l'école et refait ici pour faire des tests sur ma machine personnel.

Le problème que je rencontre ici c'est l’intégration de la librairie pthread en PRO*C. J'ai essayé bêtement de mettre un #include <pthread.h> dans mon fichier.pc mais j'ai l'erreur suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Pro*C/C++: Release 10.2.0.4.0 - Production ON Wed Nov 23 13:34:10 2011
 
Copyright (c) 1982, 2007, Oracle.  ALL rights reserved.
 
System DEFAULT OPTION VALUES taken FROM: /crelan/tst/ora_bin1/app/oracle/product/10.2.0/db_1/precomp/admin/pcscfg.cfg
 
Error at line 5, COLUMN 10 IN file DeleteRating_pthread.pc
#include <var.h>
.........1
PCC-S-02015, unable TO open include file
Syntax error at line 123, COLUMN 2, file /usr/include/sys/var.h:
Error at line 123, COLUMN 2 IN file /usr/include/sys/var.h
        __cptr64        ve_lock;        /* RO: ptr to end of recordlock table*/
.1
Et ça continue encore pour 7 ou 8 bloc du même style. J'ai regardé un peu les Makefile qui sont là depuis longtemps, et apparemment dans le Makefile_precomp (fourni par oracle je suppose), il y'a déjà le lien -lpthreads.

Première question, est ce que -lpthreads et -lpthread sont la même chose?

Ensuite, comme dans http://franckh.developpez.com/tutoriels/posix/pthreads/, j'ai rajouté à la main dans le Makefile c (on va l'appeler comme ça) le CFLAGS -D_REENTRANT :

Code :
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
42
43
44
45
46
47
48
49
50
51
52
53
#include $(ORACLE_HOME)/precomp/lib/env_precomp.mk 
include $(CREDITS_HOME)/mk/env_precomp_10.mk 

.SUFFIXES: .o .c .f .y .l .s .sh .h .C .a .pc 

# Credits stuff
CREDITSLIBPATH=$(CREDITS_HOME)/lib
CREDITSINC=$(CREDITS_HOME)/include

#
# Flags pour le compilateur (pthread) :
#
CFLAGS =-D_REENTRANT

# libraries base names
BASE=base
DBERR=dberr
FINLIB=finlib
LIFLIB=liflib
LETTLIB=lettlib
REVLIB=revlib
KRLLIB=krllib
CKPLIB=ckplib
STSLIB=stslib
CTXLIB=ctxlib
CORRLIB=corrlib
JAVALIB=javalib

CREDITSLIBS=-l$(BASE) -l$(DBERR) -l$(FINLIB) -l$(LIFLIB) -l$(LETTLIB) -l$(REVLIB) -l$(KRLLIB) -l$(CKPLIB) -l$(STSLIB) -l$(CTXLIB) -l$(CORRLIB) -l$(JAVALIB) -lm -lld -lclntsh -lcore10


USERID=credit_dev/credit
LIBDIR=$(LIBDIR32)
MAKEFILE=Makefile
OTTFLAGS=$(PCCFLAGS)
CLIBS= $(TTLIBS_QA) $(LDLIBS)
PROCPLSFLAGS= sqlcheck=full userid=$(USERID)
PROCFLAGSSQL= sqlcheck=semantics userid=$(USERID)
#PROCFLAGS= sqlcheck=semantics userid=$(USERID)
#PROCPPFLAGS= cod=cpp cpp_suffix=C include=/usr/include include=/user/lpp/xlC/include
PROCPPFLAGS= cod=cpp cpp_suffix=C $(CPLUS_SYS_INCLUDE)
INCLUDE=$(I_SYM). $(PRECOMPPUBH) $(I_SYM)$(CREDITSINC)
PROC=$(ORACLE_HOME)/bin/proc

.pc.c:
	$(PROC) $(PROCFLAGS) INCLUDE=$(CREDITSINC) DEFINE=DEBUGGING_CONTRACTS INAME=$< ONAME=$*.c

.pc.o:
	$(PROC) $(PROCFLAGS) INCLUDE=$(CREDITSINC) DEFINE=DEBUGGING_CONTRACTS INAME=$< ONAME=$*.c
	$(CC) $(CFLAGS) $(CFLAGS32) -I$(CREDITSINC)  -g -c $*.c 

.c.o:
	$(CC) $(CFLAGS) $(CFLAGS32) -I$(CREDITSINC)  -g -c $*.c 
Deuxième question, est-ce la bonne façon de faire (En sachant que ce "Makefile" là est appelé dans le vrai fichier appelé Makefile avec les commandes build etc etc)?

Troisième question, est-ce que l'erreur que j’obtiens vient de ce genre de problème (Makefile défaillant) ou est-ce que cela peut venir d'autre chose?

Et finalement, est-ce que je grille les étapes? Faut-il faire autre chose avec le système de précompilation pour avoir accès à pthread? D'après http://www.csee.umbc.edu/portal/help...ads.htm#997960, je n'ai rien trouvé d'autres comme procédures à faire...

Je précise quand dans mon code source.pc, il n'y a pour le moment rien lié aux threads, la seul ligne est #include <phtread.h>.

Merci beaucoup d'avance,
Albin.

PS : Par investiguer je veux dire que cela n'a jamais été utilisé là où je travaille et donc que personne n'a la moindre expérience avec cela.

EDIT : Je sais meme pas à quoi sert le -D_REENTRANT vu qu'en vérifiant à ma machine de test les seules choses que je faisais c'était :

-#include <lpthread>

et gcc test.c -lpthread

Donc je suis paumé... pourtant pour autant que je sache, je developpe sous un environnement UNIX...
AlbinOSG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 15h31   #2
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 25
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 25
Points : 7
Points : 7
Bon déjà des nouvelles...

J'ai testé le programme de test de thread de ma machine personnelle sur l'environnement de développement PRO*C et il compile parfaitement, je dois juste changer -lpthread par -pthread.

Évidemment dans ce cas là, je n'utilise pas le pré-compilateur pro*c... mais au moins je sais que pthread est présent et fonctionnel.

Merci beaucoup de votre aide et de votre de temps,
Albin.

EDIT : Et en essayant de compiler le programme de test avec les Makefile habituels, j'ai la même erreur...
AlbinOSG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 10h38   #3
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 25
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 25
Points : 7
Points : 7
Bon... c'est officiel j'ai perdu 3 jours de ma vie... En fait, en enlevant #include <*thread.h> cela fonctionne...

Il semblerait que la gestion des threads à été incluse par défauts dans le compilateur pro*c utilisé ou les makefile ou jesaispasquoid'autre...

Enfin, merci quand même de votre aide !

Bonne journée,
Albin.
AlbinOSG est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h39.


 
 
 
 
Partenaires

Hébergement Web