1. #21
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : juillet 2007
    Messages : 2 373
    Points : 5 287
    Points
    5 287

    Par défaut

    J'ai executé ton code PL sur ma table de mon test d'hier soir.

    Résultat : 22 secondes.


    J'ai modifié le code C pour intégérer la requete du code PL.

    Résultat : 12 secondes (exec+fetch)

    Le code C OCILIB est plus bien rapide que le PL...

    Le formatage interne de Oracle est bien plus rapide que les formatage effectuées à chaque tour de boucle pour chaque colonne à chaque fetch...

    Récupérer une seule valeur au lieu de 20 et boucler est plus rapide

    le code C modifié :

    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
    54
    55
    56
    57
    58
    59
    60
    61
     
    int main (void)
    {
        OCI_Connection *cn  = NULL;
        OCI_Statement  *st  = NULL;
        OCI_Resultset  *rs  = NULL;
     
        FILE *f = NULL;
     
        clock_t t;
     
        if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
            return EXIT_FAILURE;
     
        f = fopen("output.txt", "w");
     
        cn = OCI_ConnectionCreate("db", "usr", "pwd", OCI_SESSION_DEFAULT);
        st = OCI_StatementCreate(cn);
     
        OCI_SetFetchSize(st, 1000);
        OCI_SetPrefetchSize(st, 200);
     
        t  = clock();
     
        OCI_ExecuteStmt(st, "SELECT           "                   
                            "  TO_CHAR(CODPLAT,'S999999999')||   "         
                            "  TO_CHAR(CODPREP,'S999999999')||   "                            
                            "  TO_CHAR(NB_PLAT,'S999999999')||   "   
                            "  lpad(nvl(TO_CHAR(DATE_FAB,'YYYYMMDDhh24miss'),' '),14,' ')||   "       
                            "  lpad(nvl(TO_CHAR(DATE_CONS,'YYYYMMDDhh24miss'),' '),14,' ')||   "       
                            "  TO_CHAR(CODMEN,'S999999999')||   "   
                            "  TO_CHAR(CODDEST,'S999999999')||   "   
                            "  TO_CHAR(CODGF,'S999999999')||   "   
                            "  TO_CHAR(TYPEPLAT,'S999999999')||   "  
                            "  lpad(nvl(TO_CHAR(DATE_FAB_INI,'YYYYMMDDhh24miss'),' '),14,' ')||   "       
                            "  TO_CHAR(ID,'S999999999')||   "   
                            "  TO_CHAR(NB_PLAT_INI,'S999999999')||   "   
                            "  lpad(nvl(TO_CHAR(DATE_CREATION,'YYYYMMDDhh24miss'),' '),14,' ')||   "       
                            "  lpad(DUMMY1,50,' ')  "           
                            "FROM       "                                                     
                            "  PREV_FAB"
                            );
     
        rs = OCI_GetResultset(st);
     
        while (OCI_FetchNext(rs))
        { 
            fputs(OCI_GetString(rs, 1), f);
            fputs("\n", f);
        }
     
        printf("\n%d row(s) fetched in  %f secondes",
               OCI_GetRowCount(rs), 
               (double) (clock() - t) / (double) CLOCKS_PER_SEC);
     
        if (f)
            fclose(f);
     
     
        OCI_Cleanup();
     }
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  2. #22
    Nouveau Candidat au Club
    Inscrit en
    février 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Test de comparaison entre ancienne version et nouvelle version :

    nouvelle version :
    26570512 row(s) fetched in 358.540000 secondes (5mn58)
    fichier de 1 939 647 376octets (presque 2Go)

    ancienne version :
    7mn pour le meme fichier généré.

    Je vais lancer sur des plus gros traitements.

  3. #23
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : juillet 2007
    Messages : 2 373
    Points : 5 287
    Points
    5 287

    Par défaut

    en tout cas, avec mon jeu de test, on est passé de 72 secondes avec le code initial à 12 secondes avec le dernier code ... soit un gain de 600 %
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  4. #24
    Nouveau Candidat au Club
    Inscrit en
    février 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Je suis donc passé de la requete non formatée à la requete formatée et concaténation en 1 ligne de toutes les colonnes.

    je passe d'un temps de 12minutes à .... 3s

    c'est énorme!!

    je modifie alors les autres traitements pour de nouveaux tests.

  5. #25
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : juillet 2007
    Messages : 2 373
    Points : 5 287
    Points
    5 287

    Par défaut

    Donc :

    12 secondes en version SQL et PL/SQL
    03 secondes en version C OCILIB

    soit un diff de 400%

    pas trop mal...

    Tiens moi au courant de tes autres tests...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  6. #26
    Modérateur

    Homme Profil pro
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    7 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 7 427
    Points : 15 706
    Points
    15 706

    Par défaut

    Je n'ai jamais réellement fait de C, mais je dois reconnaître que les résultats sont impressionnants.

  7. #27
    Nouveau Candidat au Club
    Inscrit en
    février 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Fichier de 2Go, 26 millions de lignes

    ancienne version : 7mn
    nouvelle version : 2mn
    SQL/PL : 26mn
    Cobol : 1mn30

  8. #28
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : juillet 2007
    Messages : 2 373
    Points : 5 287
    Points
    5 287

    Par défaut

    la je comprends pus, je croyais que cela prenais que quelques seconde en PL/SQL (cf tes post précedents..).
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  9. #29
    Nouveau Candidat au Club
    Inscrit en
    février 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par Vincent Rogier Voir le message
    la je comprends pus, je croyais que cela prenais que quelques seconde en PL/SQL (cf tes post précedents..).
    c'est un autre test!

    par contre j'ai un gros doute sur les temps d'un coup... le Clock que tu as mis, il est fiable?

    je lance le plus gros traitement (qui mettrait 30mn en Cobol et 1h20 en SQL) avec mes printf du time pour etre sûr...

  10. #30
    Nouveau Candidat au Club
    Inscrit en
    février 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Donc je corrige le temps de 3s à 26s ...

    voici les traces :

    Start at Thu Sep 17 12:20:52 2009

    OCI_ExecuteStmt
    OCI_GetResultset
    Fin Exec

    requete executee en 0.010000 secondes

    322144 row(s) fetched in 2.970000 secondes
    End at Thu Sep 17 12:21:18 2009


    bizarre ce clock...

  11. #31
    Nouveau Candidat au Club
    Inscrit en
    février 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    Quel est l'impact du prefetch? il vaut mieux un prefetch important ou pas?

  12. #32
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : juillet 2007
    Messages : 2 373
    Points : 5 287
    Points
    5 287

    Par défaut

    ca depend de la taille d'une ligne de données, etc.. Faut tester.

    Une valeur "idéale" par défaut pourrait au alentour vers 100
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  13. #33
    Nouveau Candidat au Club
    Inscrit en
    février 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 18
    Points : 1
    Points
    1

    Par défaut

    J'étais à 500 puis je suis redescendu à 100... je vais bien voir ce que ca donne

  14. #34
    Membre à l'essai
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2009
    Messages : 12
    Points : 16
    Points
    16

    Par défaut Compilation de OCILIB 3.4.0

    Bonjour, j'essaie de compiler la lib OCILIB 3.4.0 sur un AIX 5.2.0 avec Oracle 10.2.0.4 mais en vain pour l'instant!

    Dans un premier, je souhaite compiler et linker la librairie en mode debug et 32bits. Plus tard, j'aurais également besoin de disposer de la même librairie en mode release et 64bits.
    Ci dessous le détail des opérations menées :

    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
     
    Environnement Oracle :
    ORACLE_BASE=/oracle
    ORACLE_HOME=/oracle/product/10.2.0.4
    ORACLE_SID=OSSBAI4S
     
    <<<@!1!@>>>
     
    Environnement système :
    LIBPATH=/usr/lib (sur AIX, cette variable joue le même rôle que LD_LIBRARY_PATH sous Solaris ou Linux)
     
    Compilateur C = gcc
    gcc (GCC) 3.3.2
    Copyright (C) 2003 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     
    Compilateur C++ = g++
    g++ (GCC) 3.3.2
    Copyright (C) 2003 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     
    Decompression de la librairie :
    gzip -dc ./ocilib-3.4.0-gnu.tar.gz | tar xf -
     
    Configuration de la librairie
    cd ./ocilib-3.4.0
    ./configure --with-oracle-headers-path=$ORACLE_HOME/rdbms/public --prefix=/home/axservf1/AI4S/libs
    Détail du configure ci-dessous :
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    checking for a BSD-compatible install... config/install-sh -c
    checking whether build environment is sane... yes
    checking for a thread-safe mkdir -p... config/install-sh -c -d
    checking for gawk... no
    checking for mawk... no
    checking for nawk... nawk
    checking whether make sets $(MAKE)... yes
    checking for gcc... gcc
    checking for C compiler default output file name... a.out
    checking whether the C compiler works... yes
    checking whether we are cross compiling... no
    checking for suffix of executables...
    checking for suffix of object files... o
    checking whether we are using the GNU C compiler... yes
    checking whether gcc accepts -g... yes
    checking for gcc option to accept ISO C89... none needed
    checking for style of include used by make... GNU
    checking dependency style of gcc... gcc3
    checking for a BSD-compatible install... config/install-sh -c
    checking build system type... powerpc-ibm-aix5.2.0.0
    checking host system type... powerpc-ibm-aix5.2.0.0
    checking for a sed that does not truncate output... /usr/bin/sed
    checking for grep that handles long lines and -e... /usr/bin/grep
    checking for egrep... /usr/bin/grep -E
    checking for ld used by gcc... /usr/bin/ld
    checking if the linker (/usr/bin/ld) is GNU ld... no
    checking for /usr/bin/ld option to reload object files... -r
    checking for BSD-compatible nm... /usr/bin/nm -B
    checking whether ln -s works... yes
    checking how to recognize dependent libraries... pass_all
    checking how to run the C preprocessor... gcc -E
    checking for ANSI C header files... yes
    checking for sys/types.h... yes
    checking for sys/stat.h... yes
    checking for stdlib.h... yes
    checking for string.h... yes
    checking for memory.h... yes
    checking for strings.h... yes
    checking for inttypes.h... yes
    checking for stdint.h... yes
    checking for unistd.h... yes
    checking dlfcn.h usability... yes
    checking dlfcn.h presence... yes
    checking for dlfcn.h... yes
    checking for g++... g++
    checking whether we are using the GNU C++ compiler... yes
    checking whether g++ accepts -g... yes
    checking dependency style of g++... gcc3
    checking how to run the C++ preprocessor... g++ -E
    checking for g77... g77
    checking whether we are using the GNU Fortran 77 compiler... yes
    checking whether g77 accepts -g... yes
    checking the maximum length of command line arguments... 18432
    checking command to parse /usr/bin/nm -B output from gcc object... ok
    checking for objdir... .libs
    checking for ar... ar
    checking for ranlib... ranlib
    checking for strip... strip
    checking if gcc supports -fno-rtti -fno-exceptions... no
    checking for gcc option to produce PIC...
    checking if gcc static flag -static works... yes
    checking if gcc supports -c -o file.o... yes
    checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes
    checking dynamic linker characteristics... aix5.2.0.0 ld.so
    checking how to hardcode library paths into programs... immediate
    checking whether stripping libraries is possible... no
    checking if libtool supports shared libraries... yes
    checking whether to build shared libraries... yes
    checking whether to build static libraries... no
    configure: creating libtool
    appending configuration tag "CXX" to libtool
    checking for ld used by g++... /usr/bin/ld
    checking if the linker (/usr/bin/ld) is GNU ld... no
    checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes
    checking for g++ option to produce PIC...
    checking if g++ static flag -static works... yes
    checking if g++ supports -c -o file.o... yes
    checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes
    checking dynamic linker characteristics... aix5.2.0.0 ld.so
    checking how to hardcode library paths into programs... immediate
    appending configuration tag "F77" to libtool
    checking if libtool supports shared libraries... yes
    checking whether to build shared libraries... yes
    checking whether to build static libraries... no
    checking for g77 option to produce PIC...
    checking if g77 static flag -static works... yes
    checking if g77 supports -c -o file.o... yes
    checking whether the g77 linker (/usr/bin/ld) supports shared libraries... yes
    checking dynamic linker characteristics... aix5.2.0.0 ld.so
    checking how to hardcode library paths into programs... immediate
    checking for ranlib... (cached) ranlib
    checking for OCILIB install path... /home/axservf1/AI4S/libs
    checking for OCILIB version... v3.4.0
    checking for OCILIB options... import: linkage, charset = ansi
    checking for Oracle home... defined by environment : /oracle/product/10.2.0.4
    checking for Oracle OCI headers location... /oracle/product/10.2.0.4/rdbms/public
    checking for Oracle OCI shared lib location... /oracle/product/10.2.0.4/lib32
    checking for Oracle OCI shared lib name... libclntsh.so
    checking for OCI shared lib existence... yes
    configure: creating ./config.status
    config.status: creating README
    config.status: creating Makefile
    config.status: creating src/Makefile
    config.status: creating doc/html/Makefile
    config.status: creating demo/Makefile
    config.status: creating demo/Makefile_demo
    config.status: creating config.h
    config.status: executing depfiles commands
    Et enfin, le résultat du make, je liste uniquement le début qui a mon est utile, le reste n'étant que des erreurs "induites" par la première:
    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
     
    rs42:/home/axservf1/AI4S/tools/ocilib-3.4.0> make
            make  all-recursive
    Making all in doc/html
    Target "all" is up to date.
    Making all in src
            /bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -I/oracle/product/10.2.0.4/rdbms/public -I../include   -DOCI_IMPORT_LINKAGE -DOCI_CHARSET_ANSI   -g -O2 -MT libocilib_la-bind.lo -MD -MP -MF .deps/libocilib_la-bind.Tpo -c -o libocilib_la-bind.lo `test -f 'bind.c' || echo './'`bind.c
    mkdir .libs
     gcc -DHAVE_CONFIG_H -I. -I.. -I/oracle/product/10.2.0.4/rdbms/public -I../include -DOCI_IMPORT_LINKAGE -DOCI_CHARSET_ANSI -g -O2 -MT libocilib_la-bind.lo -MD -MP -MF .deps/libocilib_la-bind.Tpo -c bind.c  -DPIC -o .libs/libocilib_la-bind.o
    bind.c:35:29: ocilib_internal.h: Invalid argument
    bind.c:45: error: parse error before "OCI_BindFree"
    bind.c:45: error: parse error before '*' token
    bind.c: In function `OCI_BindFree':
    bind.c:47: error: `bnd' undeclared (first use in this function)
    bind.c:47: error: (Each undeclared identifier is reported only once
    bind.c:47: error: for each function it appears in.)
    bind.c:47: error: `TRUE' undeclared (first use in this function)
    Quelqu'un aurait une idée ?

  15. #35
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : juillet 2007
    Messages : 2 373
    Points : 5 287
    Points
    5 287

    Par défaut

    le compilo ne trouve pas le symbole OCI_Bind..

    Celui ci est definit dans ocilib.h... qui devrait être touvé par le compilo car on voit "-I../include" dans la ligne de commande .....

    hum... fait un cleanup et ressaie ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  16. #36
    Membre à l'essai
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2009
    Messages : 12
    Points : 16
    Points
    16

    Par défaut J'avais déjà essayé

    J'avais déjà essayer ce truc sans succès. Rien ne change :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    rs42:/home/axservf1/AI4S/tools/ocilib-3.4.0/src> make all
            /bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -I/oracle/product/10.2.0.4/rdbms/public -I../include   -DOCI_IMPORT_LINKAGE -DOCI_CHARSET_ANSI   -g -O2 -MT libocilib_la-bind.lo -MD -MP -MF .deps/libocilib_la-bind.Tpo -c -o libocilib_la-bind.lo `test -f 'bind.c' || echo './'`bind.c
    mkdir .libs
     gcc -DHAVE_CONFIG_H -I. -I.. -I/oracle/product/10.2.0.4/rdbms/public -I../include -DOCI_IMPORT_LINKAGE -DOCI_CHARSET_ANSI -g -O2 -MT libocilib_la-bind.lo -MD -MP -MF .deps/libocilib_la-bind.Tpo -c bind.c  -DPIC -o .libs/libocilib_la-bind.o
    bind.c:35:29: ocilib_internal.h: Invalid argument
    bind.c:45: error: parse error before "OCI_BindFree"
    bind.c:45: error: parse error before '*' token
    Peut-être que je me trompe, mais j'ai une lecture un peu différente, ce que le compilo ne comprend pas se situe au niveau de la ligne 29 du fichier ocilib_internal.h.
    Seul hic, à cet endroit le seul truc approchant c'est des fichiers include....

  17. #37
    Membre à l'essai
    Homme Profil pro
    Architecte technique
    Inscrit en
    août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2009
    Messages : 12
    Points : 16
    Points
    16

    Par défaut Je m'en suis sorti...

    Quelle est la version minimum de gcc requise pour compiler ?
    Parce qu'il me semble que la v3.3.2 ( je sais c'est vieux...) ne convient pas.

    J'ai juste exporté CC=cc pour utiliser le compilateur IBM et la ça a marché. Toujours est-il que là encore, c'est pas du tout neuf, C for AIX Compiler, Version 6...

    M'enfin, je vais faire avec ...

    Sinon, pour le reste du projet je vais utiliser g++ sur un code massivement multi-threadé j'espère que je n'aurais pas d'ennui de compatibilité...

    L'objectif du projet est super simple: insérer dans x tables le contenu de x fichiers et ce le plus vite possible. Pour l'instant, la maquette du projet fonctionne sous Windows, on va voir ce qu'on est capable d'obtenir sous AIX...

  18. #38
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : juillet 2007
    Messages : 2 373
    Points : 5 287
    Points
    5 287

    Par défaut

    si tu compiles ocilib avec gcc pour que ocilib soit utilisé avec g++ et que tu génères des exceptions c++ depuis les callbacks d'erreurs ocilib, il faut compiler la lib avec l'option -fexceptions...
    Sinon gcc ne génèrera pas le code machine necéssaire...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  19. #39
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 1
    Points : 1
    Points
    1

    Par défaut problème de linker

    Bonjour à tous,

    Je me permet de déterrer ce post car j'ai des problèmes pour linker ocilib.
    J'ai pas mal navigué sur les forums mais je n'ai pas trouvé la solution.

    Voici l'erreur en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    g++ -I/usr/local/include -std=c++11 -pedantic -Wall -Werror -Wextra -DOCI_IMPORT_LINKAGE  src/reporting.cc -o reporting -lboost_program_options -L/opt/oracle/clt/12.1.0.2/lib -lclntsh -L/usr/local/lib -locilib
    /tmp/cc7gM2EB.o: dans la fonction &#9618; Support::calcul() const &#9618;:
    reporting.cc:(.text+0x31d): r&#9618;f&#9618;rence ind&#9618;finie vers &#9618; void ocilib::Statement::Bind<std::string const, int>(std::string const&, std::string const&, int, ocilib::Enum<ocilib::BindInfo::BindDirectionValues>) &#9618;
    reporting.cc:(.text+0x393): r&#9618;f&#9618;rence ind&#9618;finie vers &#9618; void ocilib::Statement::Bind<std::string const, int>(std::string const&, std::string const&, int, ocilib::Enum<ocilib::BindInfo::BindDirectionValues>) &#9618;
    collect2: erreur: ld a retourn&#9618; 1 code d'&#9618;tat d'ex&#9618;cution
    make: *** [all] Erreur 1
    Voici ma configuration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    [root@PF9SOSMMP01 reporting]# tree
    .
    |-- AUTHOR
    |-- Makefile
    |-- oic12.env
    |-- README
    |-- src
    |   `-- reporting.cc
    |-- tests
    |   |-- support.cc
    |   |-- support.hh
    |   `-- test.cc
    `-- TODO
    Makefile :
    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
    CC = g++
    CPPFLAGS = -I$(USER_LIBS)/include -std=c++11 -pedantic -Wall -Werror -Wextra -DOCI_IMPORT_LINKAGE
    LDFLAGS = -lboost_program_options -L$(ORACLE_HOME)/lib -lclntsh -L$(USER_LIBS)/lib -locilib
    SRC = $(wildcard src/*.cc)
    OBJ = $(SRC:.cc=.o)
    test = tests/test.cc
    BIN = reporting
     
    .PHONY: all check clean
     
     
    all :
            $(CC) $(CPPFLAGS)  $(SRC) -o $(BIN) $(LDFLAGS)
     
     
    check :
            $(CC) $(CPPFLAGS)  $(test) -o $(BIN) $(LDFLAGS)
     
    clean :
            rm -f $(BIN) $(OBJ)
    Environement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    export ORACLE_BASE=/opt/oracle
    export ORACLE_HOME=/opt/oracle/clt/12.1.0.2
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/local/lib:/usr/include:/usr/lib
    export USER_LIBS=/usr/local
    export PATH=$PATH:$ORACLE_HOME/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:~/bin
    Si quelqu'un a une idée, je suis preneur.

    Merci, A+

    --
    Tr4dition

Discussions similaires

  1. [OCILIB] Problème de compilation avec code::blocks
    Par dbqg7322 dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 11/01/2013, 13h21
  2. problème de compil devc++ socket
    Par stefdem dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 11/12/2003, 11h33
  3. Réponses: 1
    Dernier message: 29/10/2003, 12h16
  4. Problème de compilation de la DLL du XMLRad
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/04/2003, 16h46
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

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