Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    2

    Compilatori C su AIX e Redhat

    Ciao a tutti.
    premetto di non essere un esperto programmatore C. Vi riporto alcuni problemi che ho avuto provando a migrare un codice in C attualmente operativo su una workstation IBM AIX (versione 4.1) su una nuova piattaforma con LINUX Redhat 9.0.
    Nel compilare con il compilatore standard cc di Redhat questo semplice codice:

    #include "archive.h"
    readarc(fp,inline)
    FILE **fp;
    unsigned char *inline;
    {
    /* read a scan line from raw data file */
    if(fread(inline,1,ARCSIZE,*fp) != ARCSIZE) {
    return(1);
    }
    else {
    return(0);
    }
    }

    Ricevo i seguenti messaggi di errore:

    readarc.c:2: parse error before "inline"
    readarc.c: In function `readarc':
    readarc.c:4: parse error before "inline"
    readarc.c:3: declaration for parameter `fp' but no such parameter
    readarc.c:7: parse error before "inline"
    make: *** [readarc.o] Error 1

    Sapreste darmi qualche dritta? Tenete presente che il file archive.h ha a sua volta l'include di stdio.h!

    Grazie a tutti.
    Ciao,
    Nicola

  2. #2
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    EDIT: Scusa non avevo letto il codice...
    Il problema e' che il compilatore che usi (il GCC) supporta l'inline che e' standard nel C++, ma non nel C, quindi "inline" e' una parola riservata...
    Semplicemente cambia il nome di quella variabile...

    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    2

    Grazie! Un altro piccolo aiuto?

    Grazie /dev/null!!!
    Ho risolto il problema rinominando la variabile.
    Ora..posso approfittare?
    Mi è rimasto un ultimo problema che non riesco a risolvere.
    Il codice stavolta è un po' più lungo, ti riporto qui solo le linee interessate dall'errore (naturalmente posso sempre allegare l'intero file, ma per il momento potrebbe essere superfluo):
    satgrid.c:

    #include "define.h"
    #include "ephem.h"
    #include "image.h"
    #include "wmd.h"
    #include <stdio.h>
    #include <sys/file.h>
    ......
    ......
    int main(argc,argv)
    int argc;
    char *argv[];
    {
    FILE *header;
    int wmdfile,mapfile,bytes,nbytes;
    unsigned char *idata;
    .....
    .....
    /* Get the size of the database */
    lseek(wmdfile,0,L_XTND);
    if (oldf) {
    nrec = tell(wmdfile)/OLDRECSIZE;
    } else {
    nrec = tell(wmdfile)/RECSIZE;
    }
    lseek(wmdfile,0,L_SET);
    .....
    .....

    Nel compilare, ricevo il seguente errore:

    cc -g satgrid.o readheader.o np.o modulate.o mkprojmap.o mkgrid.o label.o imgmad
    satgrid.o(.text+0x1df): In function `main':
    satgrid.c:73: undefined reference to `tell'
    satgrid.o(.text+0x217):satgrid.c:75: undefined ref'
    collect2: ld returned 1 exit status
    make: *** [satgrid] Error 1

    Mentre, come prima, tutto liscio con il compilatore C su AIX!

    Qualche idea?
    Grazie.

    Ciao Ciao,
    Nicola

  4. #4
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Come dice l'errore stesso, tell() non e' definita...
    Non penso che sia definita negli headers inclusi da quei files, altrimenti la dovrebbe trovare... Non so sotto AIX dove possa venire definita (non lo conosco), se hai la possibilta' di usare un sistema AIX potresti provare a spostarti nella directory che contiene le librerie per il compilatore (ad esempio /usr/src) e cercarla li' dentro negli header che hai incluso (stdio.h, sys/file.h, quelli inclusi da questi due etc etc)...
    Ma viene un lavorone lungo e noioso...

    Prova se no a cercare con google errori simili: http://www.google.it/search?sourceid...ell%22+gcc+aix


    Il problema e' che non c'e' uno standard di software e librerie del c tra i vari sistemi unix-like (*Linux, Solaris, *bsd, Mac, Aix, ...) tutti i Linux (come anche GNU/Hurd) ad esempio usano il compilatore il GCC (Gnu C Compiler) e le librerie GLibC (Gnu C Libraries), da qui' deriva il GNU/Linux...
    A cambiare compilatore o librerie standard del C si incontrano molti problemi e per questo spesso per programmi abbastanza complessi e' necessario eseguire un port e non basta ricompilare
    Sostiuire tali librerie inoltre e' pressoche' impossibile dato che sono alla base del sistema (interagiscono direttamente col kernel tramite system calls) e spesso spuntano enormi problemi anche soltanto a cambiarne versione.


    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.