Loading ...
Global Do...
News & Politics
6
0
Try Now
Log In
Pricing
Procesar Oracle en Debian Woody Guybrush Treepwood Tabla de contenidos 1. Preliminares...............................................................................................................................................................3 2. Preparación ...............................................................................................................................................................3 Procesar Oracle en Debian Woody por Guybrush Treepwood Francisco F. Serrador <serrador@arrakis.es> Historial de revisiones Revisión 1.0 29 de junio de 2003 Formateado en Docbook-XML 1. Preliminares Este documento va a explicar como hacer funcionar los precompiladores de C++ en Debian Woody utilizando una máquina como sigue: • Kernel 2.4.18 • Gcc 2.95.4 • proc 8.1.7.4.0 Bueno, como todos sabéis si estais aquí, la versión de oracle 8.1.7.0 sólo esta certificada para un par de versiones de RedHat, creo que 7.0 y 7.1, Esto no quiere decir que no funcone en otras, sólo que los de oracle se lavan las manos cuando tienes un problema. Este documento va a tratar sobre la versión de oracle 8.1.7.4.0, más que nada porque es la versión más estable, y la última versión de 8.1. Si estás planteándote instalar una versión 8.1 deberías parchear hasta este nivel. El parche para subir de 8.1.7.0.0 a 8.1.7.4 es: p2376472_8174_LINUX.zip Para descargarlo hay que ir a la web de metalink.oracle.com y en la sección de parches buscas el numerito 2376472. Eso sí, el parche son 128 Mb. 2. Preparación Bueno, supongamos que ya tenéis instalado y funcionando el soft de oracle. Os adelanto un par de cuestiones sobre cómo instalarlo. El proceso consiste básicamente en: • El tema mas importante que no está documentado en ningún sitio es quitar la variable de entorno $LANG , si no lo quitas el «installer» no funciona. • Después, si te da el error de fin de canal de comunicaciones al hacer el startup nomount, hay que parchear las glib, aunque creo recordar que para debian no es necesario. De todos modos esto está ya muy documentado y buscado en google o en metalink seguro que encontráis algo. De todos modos no desesperéis, dentro de poco haré la prueba, y lo documentaré otra vez. Bueno, como ya supondréis la mejor manera de probar los compiladores son los ejemplos que oracle proporciona, pero yo por si acaso voy a daros otro que es más simple y es lo básico que ha de compilar. int main() { char login[255]="usuario/contraseña@basedatos"; char c; /*Esto es un comentario*/ EXEC SQL BEGIN DECLARE SECTION; char *uid="eyps_manager/eyps_manager@pru_prd_dba"; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE sqlca.h; EXEC SQL CONNECT :uid; printf("dale caña"); c=getchar(); EXEC SQL COMMIT WORK RELEASE; return 0; } 3 Procesar Oracle en Debian Woody Este fichero no hace nada. Únicamene conecta con la base de datos y espera a que pulsemos una tecla. Es simplemente para confirmar que funciona el proc. La configuracion de variables de entorno que tengo son: LANG=es_ES.ISO-8859-15 LC_ALL=es_ES.ISO-8859-15 LC_MESSAGES=spanish LD_LIBRARY_PATH=:/opt/oracle/product/8.1.7/lib ORACLE_BASE=/opt/oracle ORACLE_HOME=/opt/oracle/product/8.1.7 PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/opt/oracle/product/8.1.7/bin: /opt/java/jdeveloper/jdev/bin:/opt/java/jdk1.3.1_07/bin Si intentamos compilar a mano el fichero que he puesto al principo pasa lo siguiente: $ proc conecta.pc Esto generará un fichero conecta.c que tendremos que compilar en el gcc. Ojo al dato: el proc se configura con un fichero $ORACLE_HOME/precomp/admin/pcscfg.cfg Este fichero por omisión está vacío, y de momento dejadlo así. Luego os contaré qué poner ahí. La sintaxis del gcc para que compile bien: gcc conecta.c -o conecta -idirafter $ORACLE_HOME/precomp/public \ -L$ORACLE_HOME/lib -lclntsh Se debería poder indicar las bibliotecas en el $LD_LIBRARY_PATH pero yo no he conseguido que funcione, así que pasamos los parámetros en la línea de comandos. Bueno, ya podéis ejecutarlo. En el mejor de los casos conectará a la base de datos y os pedirá que pulséis una tecla y en el peor de los casos os dará un error ORA-***** pero el ejecutable está funcionando. ¿Ha sido fácil no? pues intentar compilar ahora el sample1.pc a ver que pasa. ---------------------Error.log------------------------ Pro*C/C++: Release 8.1.7.4.0 - Production on Sáb Jun 28 20:37:39 2003 (c) Copyright 2000 Oracle Corporation. All rights reserved. Valores de la opción predeterminados del sistema tomados de: /opt/oracle/product/8.1.7/precomp/admin/pcscfg.cfg Error en la línea 34, columna 11 del fichero /usr/include/stdio.h # include <stddef.h> ..........1 PCC-S-02015, no se ha podido abrir el fichero de inclusión Error en la línea 29, columna 10 del fichero /usr/include/bits/types.h #include <stddef.h> .........1 PCC-S-02015, no se ha podido abrir el fichero de inclusión Error de sintaxis en la línea 50, columna 3, fichero /usr/include/bits/pthreadtypes.h: 4 Procesar Oracle en Debian Woody Error en la línea 50, columna 3 del fichero /usr/include/bits/pthreadtypes.h size_t __guardsize; ..1 PCC-S-02201, Se ha encontrado el símbolo "size_t" cuando se esperaba uno de los siguientes: } char, const, double, enum, float, int, long, ulong_varchar, OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, short, signed, sql_context, sql_cursor, struct, union, unsigned, utext, uvarchar, varchar, void, volatile, a typedef name, El símbolo "enum," ha sido sustituido por "size_t" para continuar. Error de sintaxis en la línea 53, columna 3, fichero /usr/include/bits/pthreadtypes.h: Error en la línea 53, columna 3 del fichero /usr/include/bits/pthreadtypes.h size_t __stacksize; ..1 PCC-S-02201, Se ha encontrado el símbolo "size_t" cuando se esperaba uno de los siguientes: } char, const, double, enum, float, int, long, ulong_varchar, OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, short, signed, sql_context, sql_cursor, struct, union, unsigned, utext, uvarchar, varchar, void, volatile, a typedef name, El símbolo "enum," ha sido sustituido por "size_t" para continuar. Error en la línea 14, columna 10 del fichero /usr/include/_G_config.h #include <stddef.h> .........1 PCC-S-02015, no se ha podido abrir el fichero de inclusión Error en la línea 48, columna 10 del fichero /usr/include/wchar.h #include <stddef.h> .........1 PCC-S-02015, no se ha podido abrir el fichero de inclusión Error de sintaxis en la línea 72, columna 5, fichero /usr/include/wchar.h: Error en la línea 72, columna 5 del fichero /usr/include/wchar.h wint_t __wch; ....1 PCC-S-02201, Se ha encontrado el símbolo "wint_t" cuando se esperaba uno de los siguientes: char, const, double, enum, float, int, long, ulong_varchar, OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, short, signed, sql_context, sql_cursor, struct, union, unsigned, utext, uvarchar, varchar, void, volatile, a typedef name, El símbolo "enum," ha sido sustituido por "wint_t" para continuar. 5 Procesar Oracle en Debian Woody Error de sintaxis en la línea 29, columna 3, fichero /usr/include/_G_config.h: Error en la línea 29, columna 3 del fichero /usr/include/_G_config.h __mbstate_t __state; ..1 PCC-S-02201, Se ha encontrado el símbolo "__mbstate_t" cuando se esperaba uno de los siguientes: } char, const, double, enum, float, int, long, ulong_varchar, OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, short, signed, sql_context, sql_cursor, struct, union, unsigned, utext, uvarchar, varchar, void, volatile, a typedef name, El símbolo "enum," ha sido sustituido por "__mbstate_t" para continuar. Error de sintaxis en la línea 34, columna 3, fichero /usr/include/_G_config.h: Error en la línea 34, columna 3 del fichero /usr/include/_G_config.h __mbstate_t __state; ..1 PCC-S-02201, Se ha encontrado el símbolo "__mbstate_t" cuando se esperaba uno de los siguientes: } char, const, double, enum, float, int, long, ulong_varchar, OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, short, signed, sql_context, sql_cursor, struct, union, unsigned, utext, uvarchar, varchar, void, volatile, a typedef name, El símbolo "enum," ha sido sustituido por "__mbstate_t" para continuar. Error en la línea 48, columna 10 del fichero /usr/include/wchar.h #include <stddef.h> .........1 PCC-S-02015, no se ha podido abrir el fichero de inclusión Error en la línea 31, columna 10 del fichero /usr/include/gconv.h #include <stddef.h> .........1 PCC-S-02015, no se ha podido abrir el fichero de inclusión Error de sintaxis en la línea 72, columna 26, fichero /usr/include/gconv.h: Error en la línea 72, columna 26 del fichero /usr/include/gconv.h unsigned char **, size_t *, int, int); .........................1 PCC-S-02201, Se ha encontrado el símbolo "size_t" cuando se esperaba uno de los siguientes: ... auto, char, const, double, enum, float, int, long, ulong_varchar, OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, register, short, signed, sql_context, sql_cursor, static, struct, union, unsigned, utext, uvarchar, varchar, void, volatile, a typedef name, exec oracle, exec oracle begin, exec, exec sql, exec sql begin, exec sql type, exec sql var, 6 Procesar Oracle en Debian Woody El símbolo "enum," ha sido sustituido por "size_t" para continuar. Error de sintaxis en la línea 85, columna 7, fichero /usr/include/gconv.h: Error en la línea 85, columna 7 del fichero /usr/include/gconv.h size_t *); ......1 PCC-S-02201, Se ha encontrado el símbolo "size_t" cuando se esperaba uno de los siguientes: ... auto, char, const, double, enum, float, int, long, ulong_varchar, OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, register, short, signed, sql_context, sql_cursor, static, struct, union, unsigned, utext, uvarchar, varchar, void, volatile, a typedef name, exec oracle, exec oracle begin, exec, exec sql, exec sql begin, exec sql type, exec sql var, El símbolo "enum," ha sido sustituido por "size_t" para continuar. Error de sintaxis en la línea 94, columna 6, fichero /usr/include/gconv.h: Error en la línea 94, columna 6 del fichero /usr/include/gconv.h size_t *); .....1 PCC-S-02201, Se ha encontrado el símbolo "size_t" cuando se esperaba uno de los siguientes: ... auto, char, const, double, enum, float, int, long, ulong_varchar, OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, register, short, signed, sql_context, sql_cursor, static, struct, union, unsigned, utext, uvarchar, varchar, void, volatile, a typedef name, exec oracle, exec oracle begin, exec, exec sql, exec sql begin, exec sql type, exec sql var, El símbolo "enum," ha sido sustituido por "size_t" para continuar. Error de sintaxis en la línea 103, columna 3, fichero /usr/include/gconv.h: Error en la línea 103, columna 3 del fichero /usr/include/gconv.h __gconv_trans_fct __trans_fct; ..1 PCC-S-02201, Se ha encontrado el símbolo "__gconv_trans_fct" cuando se esperaba uno de los siguientes: char, const, double, enum, float, int, long, ulong_varchar, OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, short, signed, sql_context, sql_cursor, struct, union, unsigned, utext, uvarchar, varchar, void, volatile, a typedef name, Error en la línea 53, columna 11 del fichero /usr/include/libio.h # include <stdarg.h> ..........1 7 Procesar Oracle en Debian Woody PCC-S-02015, no se ha podido abrir el fichero de inclusión Error en la línea 33, columna 10 del fichero /usr/include/string.h #include <stddef.h> .........1 PCC-S-02015, no se ha podido abrir el fichero de inclusión Error en la línea 33, columna 10 del fichero /usr/include/stdlib.h #include <stddef.h> .........1 PCC-S-02015, no se ha podido abrir el fichero de inclusión Error en la línea 146, columna 10 del fichero /usr/include/sys/types.h #include <stddef.h> .........1 PCC-S-02015, no se ha podido abrir el fichero de inclusión Error en la línea 25, columna 10 del fichero /usr/include/alloca.h #include <stddef.hgt; .........1 PCC-S-02015, no se ha podido abrir el fichero de inclusión Error de sintaxis en la línea 0, columna 0, fichero sample1.pc: Error en la línea 0, columna 0 del fichero sample1.pc PCC-S-02201, Se ha encontrado el símbolo "<eof>" cuando se esperaba uno de los s iguientes: ; : an identifier, end-exec, random_terminal Error en la línea 0, columna 0 del fichero sample1.pc PCC-F-02102, Error fatal al realizar el preprocesamiento de C ---------------------------Error.log---------------------- Ahora resulta que el stdio.h tiene errores de sintaxis. Bueno pues esto es lo que más tiempo me ha llevado. La solución es: Cuanto pagais ehhhhhh??? Venga venga que esta me ha costado muchas horitas..... Todo sea por la comunidad linux, os lo cuento gratis. La solucion se la debemos a Michael Ngarimu que lo publicó en un correo en dbforums.com. El problema viene que el precompilador de c no funciona correctamente y la solucion consiste en añadir un ficherito que solucione el problema de la stdarg.h El ficherito en cuestión es: $usr/local/include/sdtarg.h -------------------------------sdtarg.h-------------------- #if !defined(_H_STDARG_) #define _H_STDARG_ #define __builtin_va_list void ** #include "/usr/lib/gcc-lib/i386-linux/3.0.4/include/stdarg.h" #endif /*_H_STDARG_*/ -------------------------------sdtarg.h-------------------- y ahora nos falta configurar el pcscfg.cfg para que utilice este fichero y para que funcione OK. El ficherito es: ---------------------------pcsdfg.cfg--------------------------------- sys_include=(/usr/local/include,$ORACLE_HOME/precomp/public,/usr/lib/gcc-lib/i386-linux/3.0.4/includ 8 Procesar Oracle en Debian Woody include=($ORACLE_HOME/precomp/public) include=($ORACLE_HOME/rdbms/demo) include=($ORACLE_HOME/network/public) include=($ORACLE_HOME/plsql/public) include=$ORACLE_HOME/precomp/syshdr CODE=ANSI_C ---------------------------pcsdfg.cfg--------------------------------- Bueno, con esto le hemos dicho donde están la bibliotecas, y además que escoja primero el fichero stdarg.h que hemos creado nosotros. Ahora si precompilamos pasa lo siguiente: $proc sample1.pc Y funciona Ahora volvemos a compilar como antes. gcc sample1.c -o sample1 -idirafter $ORACLE_HOME/precomp/public -L$ORACLE_HOME/lib -lclntsh -----------------------Error.log-------------------------- /tmp/ccce7vPv.o: En la función ‘main’: /tmp/ccce7vPv.o(.text+0x344): the ‘gets’ function is dangerous and should not be used. --------------------Error.log-------------------------- Bueno un errorcillo sin importancia. Pues eso es todo. Espero que no tengáis problemas para compilar con el proc. Este documento ha sido escrito por: Guybrush Threepwood. Guybrush@jazzcyber.com No os molestéis en mandarme preguntas porque lo he conseguido resolver casi de coña. Y no creo que pueda solucionaros el problema. 9