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 20/11/2007, 08h00   #1
Membre à l'essai
 
Inscription : février 2006
Messages : 83
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 83
Points : 24
Points : 24
Par défaut [PRO*C] Débuter

Bonjour,

Voilà, je débute avec avec pro*c et j'aimerai savoir comment compiler un fichier .c ou cpp qui vient d'être généré par le précompilateur du client oracle 9.
J'ai trouvé dans le forum la commande "proc", mais comment l'utiliser?
J'aimerai avoir plus de détail sur son utilisation et aussi sur les fichier .mk (makefile)?

Merçi
ramaro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 09h33   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
Voila un exemple pour Oracle8
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
echo $CC_CC
xlc_r
echo $CC_CFLAGS
-I. -qMAXMEM=16384 -qSPILL=4096 -L/oracle/server/ora8.1.7/lib
echo $CC_PCC
proc
echo $CC_PCCINC
/oracle/server/ora8.1.7/precomp/public CHAR_MAP=VARCHAR2 DBMS=V7 unsafe_null=yes
echo $CC_OTHERLIBS
-lm 
echo $CC_ORALIBS
-lclntsh -lsql8 -lclient8 -lcommon8 -lgeneric8 -lclient8 -lcommon8 -lgeneric8 -lnls8 -lcore8 -lnls8 -lcore8 -lnls8


# fichier:  makefile
#
# exemple de procedure de compilation de pro-c non personnalisee
# la commande est la suivante :
#            make nom-du-pro-c
# exemple : pour le programme suivant essai.pc faire : make essai
#
.SUFFIXES:
LANGUAGE=
.SUFFIXES: .pc
CC=$(CC_CC)
CFLAGS=$(CC_CFLAGS) -I$(ORACLE_HOME)/precomp/public
PCC=$(CC_PCC)
PCCINC=$(CC_PCCINC)
PCCFLAGS=include=$(PCCINC) ireclen=132 select_error=no ltype=none hold_cursor=yes sqlcheck=semantics userid=USER/MOT_DE_PASSE

OTHERLIBS=$(CC_OTHERLIBS)

LIBS =$(CC_SQLLIB) $(CC_NETLIBS) $(CC_ORALIBS)

.pc:
        $(PCC) $(PCCFLAGS) iname=$*.pc

        $(CC) $(CFLAGS) $*.c -o $* $(LIBS) $(OTHERLIBS)
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 09h52   #3
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Oracle 8 sous AIX !

mais le plus simple est de commencer par regarder les exemples fournis par Oracle ... on est sûr qu'ils marchent et qu'ils sont pour la version/plateforme que l'on utilise !


.pc : Pseudo-C d'accès aux données (Pro*C). On y trouve par exemple des définitions de VARCHAR
.c : Langage pur C. Le VARCHAR est devenu CHAR*
.o : objet binaire obtenu par compilation du .c
.exe : objet exécutable obtenu par linkage des différents .o

.pc -> .c : proc fournit par Oracle
.c -> .o : compilation effectuée par le compilateur (Visual Studio, Sun Forte ou Sun Workshop, XLC, gcc, ...)
.o -> .exe : edition de lien également effectuée par le compilateur

Le makefile est un ensemble de commande permettant d'automatiser la séquence ci-dessus via la commande make.
Citation:
Envoyé par man make
DESCRIPTION
The purpose of the make utility is to determine automatically which pieces of a large
program need to be recompiled, and issue the commands to recompile them. The manual
describes the GNU implementation of make, which was written by Richard Stallman and
Roland McGrath, and is currently maintained by Paul Smith. Our examples show C programs,
since they are most common, but you can use make with any programming language whose com-
piler can be run with a shell command. In fact, make is not limited to programs. You
can use it to describe any task where some files must be updated automatically from oth-
ers whenever the others change.

To prepare to use make, you must write a file called the makefile that describes the
relationships among files in your program, and the states the commands for updating each
file. In a program, typically the executable file is updated from object files, which
are in turn made by compiling source files.
Un exemple de pro*C : http://www.cs.utsa.edu/~wzhang/cs374...pcsample1.html
Un exemple de make file : http://gcc.gnu.org/ml/gcc-help/2003-...7/demo_proc.mk

http://oracle.estsurinternet.com/zeb...trait_pro2.htm
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 10h13   #4
Membre à l'essai
 
Inscription : février 2006
Messages : 83
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 83
Points : 24
Points : 24
merçi pour votre réponse!
j'ai trouvé la commande proc et make dans la documentation d'oracle. J'ai réussi à le compiler par ligne de commande avec l'instruction suivante :
Code :
 proc parse=none mode=oracle userid=demo/demo@orhref sample1.pc sqlcheck=semantics
Mais lorsque j'execute la commande : "make -f proc.mk sample1" ou juste la commande "make sample1", il me donne l'erreur suivante :

Code :
1
2
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
Fatal: Unable TO open makefile
Pour l'instant je n'est que le fichier sample1.c obtenu après la pré-compilation.
Donc je ne pense pas que le fichier makefile soit vraiment utile pour le moment. Ai-je raison?

Sinon, ce qui me préoccupe maintenant c'est comment obtenir l'exécutable (étape à suivre)?
ramaro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 10h22   #5
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Code :
make -f demo_proc.mk EXE=sample1 OBJS=sample1.o
c'est tout !

make va se charger d'appeller proc et cc
make va partir du .pc pour arriver à l'exécutable
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 10h57   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
Voilà ce qu’il faut changer pour Oracle 9
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
echo $CC_CC
xlc_r
echo $CC_CFLAGS
-q64 -I. -L/oracle/server/ora9.2.0/lib
echo $CC_PCC
proc
echo $CC_PCCINC
/oracle/server/ora9.2.0/precomp/public CHAR_MAP=VARCHAR2 DBMS=V7unsafe_null=yes
echo $CC_OTHERLIBS
-lm -lld -lc_r -lpthreads
echo $CC_ORALIBS
/lib/crt0_64.o -ldl -lc -lm -lpthreads -lodm -lbsd_r -lld -lperfstat -lclntsh
Pour Oracle 10 reprenez la même idée. Pour passer à Windows c’est simple.

Mais je pense que M Leo Anderson a raison, peut être au début c’est plus simple de se familiariser avec les exemples fourni par Oracle.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 11h22   #7
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
et vous continuez à lui proposer un source prévu pour AIX 64 bits

il aura l'air malin s'il veut tester sous Linux 32 Bits....
en plus, pourquoi imposer une compatibilité V7 ?
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 11h51   #8
Membre à l'essai
 
Inscription : février 2006
Messages : 83
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 83
Points : 24
Points : 24
Je viens de lancer la commande :
Code :
1
2
3
4
    make -f demo_proc.mk EXE=sample1 OBJS=sample1.o
    MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
    Error demo_proc.mk 3: Command syntax error
    *** 1 errors during make ***
... et j'obtiens une belle erreur.
ramaro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 12h07   #9
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
manifestement, vous n'utilisez pas le Visual Studio !
Hors, c'est le seul compilo certifié sous Windows....
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 12h23   #10
Membre à l'essai
 
Inscription : février 2006
Messages : 83
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 83
Points : 24
Points : 24
Ce qui veut dire que je doit utiliser Visual Studio, il y a pas moyen?

Mais cela dépend t-il de l'IDE?

J'ai essayé avec vc++ 6, et quand j'ai compilé il m'affiche l'erreur :

Code :
1
2
3
4
Compiling...
sample1.c
d:\pro_c9\exo\tp1\sample1.c(192) : fatal error C1083: Cannot open include file: 'sqlca.h': No such file OR directory
Error executing cl.exe.
Je ne trouve la librairie adéquate pour générer l'executable. J'ai trouver quelque part l'existance de "orasql8.lib" que je doit ajouter parmis mes librairies, mais là je suis sous un client oracle 9.
Quelle librairie pourait la remplacer?
Est-ce que cela résoudra-t-il mon problème?
ramaro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 14h11   #11
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
M. Anderson vous avez raison. Je suis un peu lourde ce matin
Voilà Oracle9 et Windows
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
$ echo $CC_CC
cl.exe
$ echo $CC_CFLAGS
/MDd /W3 /Gn /GX /Zi /Od /I. /D "WIN32" /D "_DEBUG" /D "_CONSOLE"
$ echo $CC_PCC
proc.exe
$ echo $CC_PCCINC
D:\Oracle\ora920\precomp\public dbms=v7 unsafe_null=yes
$ echo $CC_OTHERLIBS
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /subsystem:
$ echo $CC_ORALIBS
D:\\oracle\\ora920\\precomp\\lib\\msvc\\orasql9.lib
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 14h22   #12
Membre à l'essai
 
Inscription : février 2006
Messages : 83
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 83
Points : 24
Points : 24
Tu peux m'expliquer s'il te plait.

ramaro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 14h38   #13
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
$CC_CC c’est le compilateur : cl c’est Microsoft
$CC_CFLAGS sont les options de compilation. Vous pouvez les mettre directement dans votre projet VC si vous avez fait un ainsi que les bibliothèques
$CC_PCC c’est votre pré compilateur. Cette étape à priori vous l’avez passée
$CC_PCCINC c’est sont des options de précompilation (à voir la documentation Oracle)
$CC_OTHERLIBS les bibliothèques Microsoft à utiliser
$CC_ORALIBS les bibliothèques Oracle à utiliser

Fichier source toto.pc
Précompilation In toto.pc Out toto.c
Compilation In toto.c Out toto.obj
Linker In Toto.obj + toutes les Libs Out toto.exe
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 09h50   #14
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
Peut être ça aide
Code :
1
2
3
4
5
6
7
8
9
10
 
E:\Portages\marius_comp\test>proc userid=scott/tiger@rdev sqlcheck=semantics iname=sample1
 
E:\Portages\marius_comp\test>cl.exe /MDd /W3 /GX /Zi /Od /I. /D "WIN32" /D "_DEBUG" /D "_CONSOLE" -ID:\oracle\ora920\precomp\public sample1.c -o sample1 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib D:\oracle\ora920\precomp\lib\msvc\orasql9.lib
 
E:\Portages\marius_comp\test>sample1.exe scott/tiger
 
Connected TO ORACLE AS user: SCOTT
 
Enter employee number (0 TO quit):
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 11h25   #15
Membre à l'essai
 
Inscription : février 2006
Messages : 83
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 83
Points : 24
Points : 24
merçi pour tes réponses!
Effectivement ça pourrait aider! Ca me permettrait de voir plus claire, comment
le compilateur marche.

Finalement j'ai utilisé visual studio et ça marche.

merçi et @+
ramaro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 13h56   #16
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
Essayez d'utiliser un fichier make. VS vient avec NMAKE en plus de cl.exe

Voila un autre exemple si un jour tu te décide à passer au Linux
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
$ echo $CC_CC
gcc
$ echo $CC_CFLAGS
-O -I. -I/home/oracle/product/9.2.0.1/OraHome1/precomp/public -I/home/oracle/product/9.2.0.1/OraHome1/rdbms/public -I/home/oracle/product/9.2.0.1/OraHome1/network/public -I/home/oracle/product/9.2.0.1/OraHome1/plsql/public -L/home/oracle/product/9.2.0.1/OraHome1/lib
$ echo $CC_PCC
proc
$ echo $CC_PCCINC
/home/oracle/product/9.2.0.1/OraHome1/precomp/public DBMS=V7 unsafe_null=yes
$ echo $CC_OTHERLIBS
-ldl -lm
$ echo $CC_ORALIBS
-L/home/oracle/product/9.2.0.1/OraHome1/lib -lclntsh -lnbeq9 -lnhost9 -lnus9 -lnldap9 -lldapclnt9 -lnsslb9 -lnoname9 -lntcp9 -lntcps9 -lnsslb9 -lntcp9 -lntns9 -ldl -lm -lpthread -lnsl
$
mnitu 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 16h19.


 
 
 
 
Partenaires

Hébergement Web