9 septembre 2020

make - erreur fatale: sqlcpr.h : Aucun fichier ou dossier de ce type

Sur une de mes plateformes, lors de la recompilation de programmes C (make all), des erreurs apparaissent sur les programmes DNA4 et DNA8 :

---
---    APC.c   -->  APC.o
---
cc -D_SIGA_TYPE_MONO -m64 -fPIC -c APC.c
cc -D_SIGA_TYPE_MONO -m64 -fPIC  -O             -c -o DNA4.o DNA4.c
DNA4.c:334:22: erreur fatale: sqlcpr.h : Aucun fichier ou dossier de ce type
 #  include <sqlcpr.h>
                      ^
compilation terminée.
make: *** [DNA4.o] Erreur 1

et

DNA8.c:394:22: erreur fatale: sqlcpr.h : Aucun fichier ou dossier de ce type
 #  include <sqlcpr.h>
                      ^
compilation terminée.
make: *** [DNA8.o] Erreur 1

Il se trouve que le répertoire contient des fichiers source DNA*.c et des DNA*.pc

Ces sources nécessitent une précompilation Oracle.
Pour que le makefile considère en priorité les sources ".pc" il faut donc :

  • soit retirer les ".c" (rm)
  • soit mettre à jour l'horodatage des ".pc" (touch).

Sans cela c'est une commande de compilation C classique qui est lancée, et les appels Oracle ne sont pas compris. 


Exemple :

rm -f DNA4.c

make DNA4.o

---
---    DNA4.pc   -->  DNA4.o
---

Pro*C/C++: Release 19.0.0.0.0 - Production on Wed Sep 9 14:52:59 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

System default option values taken from: /app/oracle/client/product/19.0.0/client_1/precomp/admin/pcscfg.cfg

cc -D_SIGA_TYPE_MONO -m64 -fPIC -c  -I/app/oracle/client/product/19.0.0/client_1/precomp/hdrs  -I/app/oracle/client/product/19.0.0/client_1/precomp/public -I/app/oracle/client/product/19.0.0/client_1/precomp/include   -I/app/oracle/client/product/19.0.0/client_1/oracore/include -I/app/oracle/client/product/19.0.0/client_1/oracore/public -I/app/oracle/client/product/19.0.0/client_1/oracore/port/include -I/app/oracle/client/product/19.0.0/client_1/xdk/include -I/app/oracle/client/product/19.0.0/client_1/xdk/public -I/app/oracle/client/product/19.0.0/client_1/nlsrtl/include  -I/app/oracle/client/product/19.0.0/client_1/ldap/public/sslinc -I/app/oracle/client/product/19.0.0/client_1/ldap/include/sslinc -I/app/oracle/client/product/19.0.0/client_1/ldap/include/cryptoinc  -I/app/oracle/client/product/19.0.0/client_1/slax/include   -I. DNA4.c

ls -lrt DNA4*
18536 2016-12-15 15:37 DNA4.pc
    0 2020-09-09 14:52 DNA4.lis
35270 2020-09-09 14:52 DNA4.c
18608 2020-09-09 14:52 DNA4.o

Une autre option est de préciser explicitement dans le $SIGACS/adm/src/Makefile la règle de compilation pour ces programmes. Ajouter alors (avant la règle ".pc.o:  $(*).pc") deux chapitres sur le modèle de celui indiquant la règle ".pc.o:  $(*).pc".

Dans mon cas :

#----------------------------------------------------------------
#       Build the object module DNA4.o
#
DNA4.o: DNA4.pc
        @echo "--- "
        @echo "---    DNA4.pc   -->  DNA4.o "
        @echo "--- "
        @$(PROC) $(PCCFLAGS) iname=DNA4.pc oname=DNA4.c
        $(CC) -c $(DEFINE_PROC) $(INCLUDE) DNA4.c
#----------------------------------------------------------------
#       Build the object module DNA8.o
#
DNA8.o: DNA8.pc
        @echo "--- "
        @echo "---    DNA8.pc   -->  DNA8.o "
        @echo "--- "
        @$(PROC) $(PCCFLAGS) iname=DNA8.pc oname=DNA8.c
        $(CC) -c $(DEFINE_PROC) $(INCLUDE) DNA8.c


Aucun commentaire:

Enregistrer un commentaire