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

[51] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 8 mar 2011, 18:45

ok modificato, ma quando faccio la call mi ritorna l'errore che "Filename should be a string." ma 'matname' è una stringa. Il problema credo sia in questa parte:

Codice: Seleziona tutto

for(i=0; i<*nrhs; i++) {
const mxArray *matptr;
      matptr = prhs[i];
      if (!mxIsNumeric(matptr)) ...


poiché matptr risulta contenere valori numerici e non capisco perché visto che 'prhs' è puntatore alla mia stringa nella variabile 'matname'.

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

[52] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 9 mar 2011, 15:27

vorrei il parere di un esperto: secondo te la funzione allegata può ovviare alla "spm_unlink2.c" (allegata precedentemente)?

"prova_unlink.c" riesco a linkarla senza problemi e mi sembra che faccia lo stesso della "spm_unlink2.c"
Allegati
prova_unlink.zip
(415 Byte) Scaricato 87 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

[53] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 9 mar 2011, 16:17

L'ultimo sorgente in C non ho visto errori gravi. Il sorgente precedente, tralasciando gli errori segnalati, non riesco a capire il complicato modo di scrivere il codice e lo scopo finale.

Se vuoi cancellare un file Scilab ha già la funzione per per farlo:

http://help.scilab.org/docs/5.3.0/en_US/deletefile.html

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

[54] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 9 mar 2011, 16:19

Hai ragione, il file precedente non l'ho scritto io l'ho trovato già nel programma matlab di cui sto effettuando il porting. Mi sa che lo sostituisco con l'ultimo che ho allegato.

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

[55] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 10 mar 2011, 11:41

Ciao! sto compilando tramite Scilab e tentando di linkarla con ilib_for_link (questa volta la funzione è molto più complessa e non sono in grado di sostituirla con un'altra funzione scritta da me) digitando "ilib_for_link('spm_conv_vol2','spm_conv_vol2.c', 'C:\Programmi\scilab-5.3.0\bin', 'c');" ma mi ritorna il seguente messaggio:
Genera un file del loader
Genera un makefile
Esecuzione del makefile in corso
Compilazione di spm_conv_vol2.c
Creazione in corso della libreria condivisa (attendere)

! "C:\PROGRA~1\SCILAB~1.0\bin\dumpexts" -o "libspm_conv_vol2.def" "libspm_conv_vol2" spm_conv_vol2.obj !
! !
! lcclnk -dll -nounderscores spm_conv_vol2.obj C:\Programmi\scilab-5.3.0\bin.lib "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\MALLOC.lib" "C:\DOCUME~1\!
! User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\blasplus.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\libf2c.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\sc!
! ilab-5.3.0\lcclib\lapack.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\scicos.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\intersc!
! i.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\output_stream.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\dynamic_link.lib" "C:\!
! DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\integer.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\optimization_f.lib" "C:\DOCUME~1\User\DA!
! TIAP~1\Scilab\scilab-5.3.0\lcclib\libjvm.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\scilocalization.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\sc!
! ilab-5.3.0\lcclib\libintl.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\linpack_f.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\cal!
! l_scilab.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\time.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\api_scilab.lib" "C:\DOCUM!
! E~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\hashtable.lib" "C:\DOCUME~1\User\DATIAP~1\Scilab\scilab-5.3.0\lcclib\scilab_windows.lib" "C:\DOCUME~1\User\DATI!
! AP~1cannot open c:\programmi\scilab-5.3.0\bin.lib !
! !
!\Scilab\scilab-5.3.0\lcclib\libscilab.lib" libspm_conv_vol2.def -o libspm_conv_vol2.dll !
! !
!make: Error code 1 !
! !
!make: 'libspm_conv_vol2.dll' removed. !
!--error 10000
ilib_compile: Error while executing Makelib.lcc.
at line 66 of function ilib_compile called by :
at line 86 of function ilib_for_link called by :
ilib_for_link('spm_conv_vol2','spm_conv_vol2.c', 'C:\Programmi\scilab-5.3.0\bin', 'c');


e non so dove sbaglio con la funzione ilib_for_link

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

[56] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 10 mar 2011, 15:25

Per mia fortuna io non uso sistemi operativi sviluppati a Redmond :D

L'unica cosa che posso fare è riportare la riga con il messaggio d'errore (come al solito basta leggere):

Codice: Seleziona tutto

cannot open c:\programmi\scilab-5.3.0\bin.lib

non trova quella libreria.

P.S. Forse non hai letto bene la documentazione della funzione "ilib_for_link":

http://help.scilab.org/docs/5.3.0/en_US ... _link.html

il terzo parametro sono i nomi delle librerie aggiuntive, se tu fornisci un path che non c'entra nulla con una libreria è normale che il linker ti segnali un errore.

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

[57] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 10 mar 2011, 16:35

Ho da farti una domanda molto stupida:

Codice: Seleziona tutto

C:\Documents and Settings\User\Desktop\San Raffaele\Scilab\spm>gcc -O2 -shared -
o libconv.so spm_conv_vol.c -I C:/Programmi/scilab-5.3.0/modules/mexlib/includes
-I C:/DOCUME~1/User/Desktop/San Raffaele/Scilab/spm -L C:/Programmi/scilab-5.3.0/
bin -lmex


quando digito così il prompt dei comandi mi dice che non conosce la directory a causa dello spazio tra San e Raffaele. Se però digito il comando con SanRaffaele attaccato non mi trova la directory comunque.
Se digito:

Codice: Seleziona tutto

C:\Documents and Settings\User\Desktop\San Raffaele\Scilab\spm>gcc -O2 -shared -
o libconv.so spm_conv_vol.c -I C:/Programmi/scilab-5.3.0/modules/mexlib/includes
-I C:/DOCUME~1/User/Desktop/SAN~1/Scilab/spm -L C:/Programmi/scilab-5.3.0/bin -l
mex


continua a dirmi che non mi trova la directory; cosa devo fare perché l'opzione -I mi includa la cartella desiderata?

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

[58] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 10 mar 2011, 17:27

La peggior cosa che uno può fare con i path delle directory è mettere gli spazzi :evil:. Gli spazzi sono usati come separatori delle opzioni. Se proprio uno ha degli spazzi basta mettere il percorso delimitato con il doppio apice (") all'inizio e alla fine del path. Sotto Linux (gli utenti Linux di solito non usano gli spazzi) si può usare anche backslash spazio (\ ) dove c'è uno spazio, ignoro se funziona con i sistemi operativi sviluppati a Redmond.

Se il path ha lo spazio e tu cancelli lo spazio è ovvio che poi ti segnali errore, sono due path diversi.

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

[59] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 11 mar 2011, 11:12

Volevo chiederti come compileresti un set di funzioni così articolato (allegato).
La principale è spm_conv_vol2.c gli altri sono tutti file ".h". io ho provato facendo:

gcc -O2 -shared -o lib_conv_vol.so spm_conv_vol.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


ma mi ritorna:
C:\DOCUME~1\User\IMPOST~1\Temp\cclvvQ2y.o:spm_conv_vol.c:(.text+0x34): undefined
reference to `get_maps'
C:\DOCUME~1\User\IMPOST~1\Temp\cclvvQ2y.o:spm_conv_vol.c:(.text+0x54): undefined
reference to `free_maps'
C:\DOCUME~1\User\IMPOST~1\Temp\cclvvQ2y.o:spm_conv_vol.c:(.text+0xf2): undefined
reference to `free_maps'
C:\DOCUME~1\User\IMPOST~1\Temp\cclvvQ2y.o:spm_conv_vol.c:(.text+0x187): undefine
d reference to `free_maps'
C:\DOCUME~1\User\IMPOST~1\Temp\cclvvQ2y.o:spm_conv_vol.c:(.text+0x65b): undefine
d reference to `slice'
C:\DOCUME~1\User\IMPOST~1\Temp\cclvvQ2y.o:spm_conv_vol.c:(.text+0x999): undefine
d reference to `free_maps'
C:\DOCUME~1\User\IMPOST~1\Temp\cclvvQ2y.o:spm_conv_vol.c:(.text+0xb78): undefine
d reference to `free_maps'
collect2: ld returned 1 exit status


(io tutti i seguenti file li ho nella cartella
"C:\Documents and Settings\User\Desktop\San Raffaele\Scilab\spm", ma non capisco come fa a non trovarmi free_maps ecc. che risiedono nel file "spm_mapping.h".

Il mio fine sarebbe quello di linkarle a Scilab in un secondo momento.
Allegati
Funzioni.zip
(4.83 KiB) Scaricato 73 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

[60] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 11 mar 2011, 18:03

L'errore come al solito è chiarissimo basta leggerlo:

Codice: Seleziona tutto

C:\DOCUME~1\User\IMPOST~1\Temp\cclvvQ2y.o:spm_conv_vol.c:(.text+0x34): undefined
reference to `get_maps'

ti è già capitato in precedenza una cosa simile, ti consiglio quindi di rileggere bene il manuale del compilatore è tutto quello detto in questi thread. L'errore è generato dal linker, manca una libreria o un sorgente con l'istanza di quella funzione, in questo caso "get_maps". Ti posso dire che in nessuna libreria di Scilab versione 5.0.3 contiene il simbolo "get_maps".

Dai commenti presenti nei sorgenti non credo che non sei tu il programmatore. L'autore di quel codice, nel file "win32mmap.h", ha programmato un emulatore per il sistemi operativi sviluppati a Redmond che non hanno la gestione mmap (memory mapping) con le stesse chiamate dei sistemi POSIX (come Linux). Consiglio di contattore l'autore originario per farti mandare le parti mancanti.

P.S. San Google ha trova credo il codice originario:

http://www.umich.edu/~fmri/course/2005/files/spm2

le funzioni mancanti si trovano nel file "spm_mapping.c" :ok:


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