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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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 :
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)?
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
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
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...
Partager