Traduzione Matlab-Scilab
-
fabrileroy
10 3 - New entry

- Messaggi: 54
- Iscritto il: 1 feb 2011, 13:22
0
voti
[61] Re: Traduzione Matlab-Scilab
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!
-
fabrileroy
10 3 - New entry

- Messaggi: 54
- Iscritto il: 1 feb 2011, 13:22
0
voti
[62] Re: Traduzione Matlab-Scilab
Non capisco inoltre perché quando compilo:
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
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
0
voti
[63] Re: Traduzione Matlab-Scilab
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 ....".
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 ....".
-
fabrileroy
10 3 - New entry

- Messaggi: 54
- Iscritto il: 1 feb 2011, 13:22
0
voti
[64] Re: Traduzione Matlab-Scilab
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?
0
voti
[65] Re: Traduzione Matlab-Scilab
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.
-
fabrileroy
10 3 - New entry

- Messaggi: 54
- Iscritto il: 1 feb 2011, 13:22
0
voti
[66] Re: Traduzione Matlab-Scilab
ho seguito il tuo consiglio compilando così:
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
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
0
voti
[67] Re: Traduzione Matlab-Scilab
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 errori con "undefined reference" sono già stati trattati più volte, rileggi il thread per capire come correggerli.
-
fabrileroy
10 3 - New entry

- Messaggi: 54
- Iscritto il: 1 feb 2011, 13:22
0
voti
[68] Re: Traduzione Matlab-Scilab
volevo chiederti una cosa, se compilassi così:
e poi creassi una libreria statica con il comando 'ar':
la libreria statica libconv.a viene creata senza error.
Secondo te potrebbe essere una scelta valida per risolvere i miei problemi di compilazione?
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?
-
fabrileroy
10 3 - New entry

- Messaggi: 54
- Iscritto il: 1 feb 2011, 13:22
0
voti
[70] Re: Traduzione Matlab-Scilab
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 ?

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

