Traduzione Matlab-Scilab

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

Avatar utente
Foto Utentefabrileroy
10 3
New entry
New entry
Messaggi: 54
Iscritto il: 1 feb 2011, 13:22
0
voti

[61] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 13 mar 2011, 16:09

anche aggiungendo il file spm_mapping.c alla riga di comando per la compilazione tutto sommato continua a darmi problemi e non so proprio come compilare questo set di funzioni!

Avatar utente
Foto Utentefabrileroy
10 3
New entry
New entry
Messaggi: 54
Iscritto il: 1 feb 2011, 13:22
0
voti

[62] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 15 mar 2011, 14:14

Non capisco inoltre perché quando compilo:

Codice: Seleziona tutto

gcc -O2 -shared -o lib_conv_vol.so spm_conv_vol.c spm_mapping.c win32mmap.c spm_vol_access.c spm_vol_utils.c  spm_make_lookup.c spm_getdata.c -I C:\Programmi\scilab-5.3.0\modules\mexlib\includes -I  C:\Documents and Settings\User\Desktop\San Raffaele\
Scilab\spm" -L C:\Programmi\scilab-5.3.0\bin -lmex


mi ritorna un numero elevato di errori tra i quali:

spm_vol_utils.c: In function 'RESAMPLE_0':
spm_vol_utils.c:252:1: error: expected declaration specifiers before 'IMAGE_DTYPE'


come se IMAGE_DTYPE non venisse definito come tipo... invece non è vero lo definisco tramite #define
Allegati
spm_vol_utils.zip
(4.32 KiB) Scaricato 131 volte

Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
Messaggi: 1778
Iscritto il: 5 dic 2009, 17:37
Località: Italy Turin
0
voti

[63] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 15 mar 2011, 15:06

Quel sorgente è vecchissimo, usa la notazione di dichiarazione di funzioni K&R (Kernighan & Ritchie) non del ANSI C. Esistono dei compilatori che segnalano errore le funzioni dichiarate in quel modo.

Non gli definisci uno dei tanti simboli "SPM_*" quindi alla fine mancano le dichiarazioni dei tipi. Gli devi passare la definizione con l'opzione '-D' al compilatore, ad esempio "gcc -DSPM_FLOAT ....".

Avatar utente
Foto Utentefabrileroy
10 3
New entry
New entry
Messaggi: 54
Iscritto il: 1 feb 2011, 13:22
0
voti

[64] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 15 mar 2011, 16:36

xyz ha scritto:Quel sorgente è vecchissimo, usa la notazione di dichiarazione di funzioni K&R (Kernighan & Ritchie) non del ANSI C. Esistono dei compilatori che segnalano errore le funzioni dichiarate in quel modo.


scusami ma non ho capito quale sorgente usa la notazione K&R.

Non gli definisci uno dei tanti simboli "SPM_*" quindi alla fine mancano le dichiarazioni dei tipi. Gli devi passare la definizione con l'opzione '-D' al compilatore, ad esempio "gcc -DSPM_FLOAT ....".


ma scusami il #define non dovrebbe defenirmi i tipi? Devo passare l'opzione -D + tutte le variabili che argomento dei #define?

Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
Messaggi: 1778
Iscritto il: 5 dic 2009, 17:37
Località: Italy Turin
0
voti

[65] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 15 mar 2011, 17:37

fabrileroy ha scritto:scusami ma non ho capito quale sorgente usa la notazione K&R.

Il tuo è ovvio, se no non te lo avrei segnalato. Questa notazione è preistorica nel file "spm_vol_utils.c":

Codice: Seleziona tutto

...
void
RESAMPLE_0 (m, vol, out, x, y, z, xdim, ydim, zdim, background, scale, offset)
     int m, xdim, ydim, zdim;
     double out[], x[], y[], z[], background, scale[], offset[];
     IMAGE_DTYPE *vol[];
{
...
}
...

I primi compilatori C voleva le dichiarazione delle funzioni in questo modo:

Codice: Seleziona tutto

int
main(argc, argv)
    int argc;
    char *argv[];
{
...
}

Con lo standard ANSI C si è passati a una notazione più conforme e comoda:

Codice: Seleziona tutto

int main(int argc, char *argv[])
{
...
}

prova a compilare il sorgente con l'aggiunta di queste opzioni "gcc -Wold-style-definition -Wold-style-declaration ...".

fabrileroy ha scritto:ma scusami il #define non dovrebbe defenirmi i tipi? Devo passare l'opzione -D + tutte le variabili che argomento dei #define?

I "#define ..." sono direttive del preprocessore le quali sostituiscono con delle regole parti di codice. Sarebbe stato più elegante utilizzare "typedef ..." ma ha utilizzato i "#define ...".

Se non definisci un nome presente nei sorgenti valido quando il preprocessore incontra i vari:

Codice: Seleziona tutto

#ifdef SPM_DOUBLE
#ifdef SPM_FLOAT
#ifdef SPM_SIGNED_CHAR
#ifdef SPM_SIGNED_INT
#ifdef SPM_SIGNED_SHORT
#ifdef SPM_UNSIGNED_CHAR
#ifdef SPM_UNSIGNED_INT
#ifdef SPM_UNSIGNED_SHORT


Non eseguirà nessuna sostituzione del codice e il compilatore genererà l'errore precedente.

Avatar utente
Foto Utentefabrileroy
10 3
New entry
New entry
Messaggi: 54
Iscritto il: 1 feb 2011, 13:22
0
voti

[66] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 16 mar 2011, 15:40

ho seguito il tuo consiglio compilando così:

Codice: Seleziona tutto

gcc -Wold-style-definition -Wold-style-declaration -O2 -shared -o lib_conv_vol.so -DSPM_UNSIGNED_CHAR -DSPM_SIGNED_CHAR -DSPM_SIGNED_SHORT -DSPM_UNSIGNED_SHORT -DSPM_SIGNED_INT -DSPM_UNSIGNED_INT -DSPM_FLOAT -DSPM_DOUBLE -DSPM_BYTESWAP spm_conv_vol.c spm_mapping.c win32mmap.c spm_vol_access.c spm_vol_utils.c  spm_make_lookup.c spm_getdata.c -I C:\Programmi\scilab-5.3.0\modules\mexlib\includes -I  C:\Documents and Settings\User\Desktop\San Raffaele\Scilab\spm" -L C:\Programmi\scilab-5.3.0\bin -lmex


mi ritorna un'infinità di warning e non mi crea il file lib_conv_vol.so ti mostro una parte dei warning:

spm_datatypes.h:8:0: warning: "SPM_FLOAT" redefined
<command-line>:0:0: note: this is the location of the previous definition
spm_datatypes.h:9:0: warning: "SPM_DOUBLE" redefined
<command-line>:0:0: note: this is the location of the previous definition
spm_datatypes.h:10:0: warning: "SPM_SIGNED_CHAR" redefined
<command-line>:0:0: note: this is the location of the previous definition ...


+ altri warning sulle variabili specificate con l'opzione -D e old-style function defenition.
Ma soprattutto credo che non mi crei il file perché alla fine mi ritorna:

C:\DOCUME~1\User\IMPOST~1\Temp\ccNiHmD4.o:spm_mapping.c:(.text+0x34): undefined
reference to `munmap'
C:\DOCUME~1\User\IMPOST~1\Temp\ccRahBLE.o:spm_vol_access.c:(.text+0x1b1): undefi
ned reference to `resample_uchar'
C:\DOCUME~1\User\IMPOST~1\Temp\ccRahBLE.o:spm_vol_access.c:(.text+0x211): undefi
ned reference to `resample_schar'
C:\DOCUME~1\User\IMPOST~1\Temp\ccRahBLE.o:spm_vol_access.c:(.text+0x271): undefi
ned reference to `resample_short'
C:\DOCUME~1\User\IMPOST~1\Temp\ccRahBLE.o:spm_vol_access.c:(.text+0x2d1): undefi
ned reference to `resample_ushort'
C:\DOCUME~1\User\IMPOST~1\Temp\ccRahBLE.o:spm_vol_access.c:(.text+0x331): undefi
ned reference to `resample_int'
C:\DOCUME~1\User\IMPOST~1\Temp\ccRahBLE.o:spm_vol_access.c:(.text+0x391): undefi
ned reference to `resample_uint'
C:\DOCUME~1\User\IMPOST~1\Temp\ccRahBLE.o:spm_vol_access.c:(.text+0x451): undefi
ned reference to `resample_float'
C:\DOCUME~1\User\IMPOST~1\Temp\ccRahBLE.o:spm_vol_access.c:(.text+0x4b1): undefi
ned reference to `resample_double' ....


tutte funzioni che compaiono in spm_vol_access.c come extern void

Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
Messaggi: 1778
Iscritto il: 5 dic 2009, 17:37
Località: Italy Turin
0
voti

[67] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 16 mar 2011, 16:37

xyz ha scritto:Non gli definisci uno dei tanti simboli "SPM_*"

Ho scritto uno non tutti :!: .

Se gli definisci più di uno è ovvio che segnala una ridefinizione del simbolo, si capisce benissimo studiando il sorgente. Devi definire uno solo tra questi simboli:

    SPM_DOUBLE
    SPM_FLOAT
    SPM_SIGNED_CHAR
    SPM_SIGNED_INT
    SPM_SIGNED_SHORT
    SPM_UNSIGNED_CHAR
    SPM_UNSIGNED_INT
    SPM_UNSIGNED_SHORT
Gli avvisi quando abiliti le opzioni "-Wold-style-definition -Wold-style-declaration " sono le funzioni che usano la sintassi vecchissima di dichiarazione.

Gli errori con "undefined reference" sono già stati trattati più volte, rileggi il thread per capire come correggerli.

Avatar utente
Foto Utentefabrileroy
10 3
New entry
New entry
Messaggi: 54
Iscritto il: 1 feb 2011, 13:22
0
voti

[68] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 17 mar 2011, 12:02

volevo chiederti una cosa, se compilassi così:

Codice: Seleziona tutto

gcc -Wold-style-definition -Wold-style-declaration -c -fPIC -DSPM_DOUBLE spm_conv_vol.c spm_mapping.c win32mmap.c spm_vol_access.c spm_vol_utils.c  spm_make_lookup.c spm_getdata.c -IC:\Programmi\scilab-5.3.0\modules\mexlib\includes -I"C:\Documents and Settings\User\Desktop\San Raffaele\Scilab\spm" -LC:\Programmi\scilab-5.3.0\bin -lmex


e poi creassi una libreria statica con il comando 'ar':

Codice: Seleziona tutto

ar rcs libconv.a spm_conv_vol.o spm_getdata.o spm_make_lookup.o spm_mapping.o spm_vol_access.o spm_vol_utils.o win32mmap.o


la libreria statica libconv.a viene creata senza error.
Secondo te potrebbe essere una scelta valida per risolvere i miei problemi di compilazione?

Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
Messaggi: 1778
Iscritto il: 5 dic 2009, 17:37
Località: Italy Turin
0
voti

[69] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 17 mar 2011, 12:17

fabrileroy ha scritto:Secondo te potrebbe essere una scelta valida per risolvere i miei problemi di compilazione?

No.

Avatar utente
Foto Utentefabrileroy
10 3
New entry
New entry
Messaggi: 54
Iscritto il: 1 feb 2011, 13:22
0
voti

[70] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 18 mar 2011, 10:23

xyz ha scritto:No.

perché?

non mi vengono segnalati errori e la compilazione avviene, sinceramente non so come avviene però.

Inoltre le funzioni definite come extern void in spm_vol_access.c (per es. "resample_uchar()") continuo a non trovarle in nessuna altro file. E' possibile che non siano definite da qualche altra parte? Ho provato a fare una ricerca sia tra i file di spm che tra gli include di Scilab e non risultano definite!
Dovrei definirle io in un file .h ed includerlo in sp_vol_access.c ?


Torna a “Programmi applicativi: simulatori, CAD ed altro”