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

[41] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 5 mar 2011, 16:49

Problema:

non capisco perché quando compilo (gcc -O2 -shared -o libunlink.so spm_unlink2.c) la funzione che ti ho allegato il compilatore mi ritorna questi errori:

C:\DOCUME~1\User\IMPOST~1\Temp\cc6Aa6EI.o:spm_unlink2.c:(.text+0x31): undefined
reference to `mxIsNumeric'
C:\DOCUME~1\User\IMPOST~1\Temp\cc6Aa6EI.o:spm_unlink2.c:(.text+0x40): undefined
reference to `mxGetN'
C:\DOCUME~1\User\IMPOST~1\Temp\cc6Aa6EI.o:spm_unlink2.c:(.text+0x58): undefined
reference to `mxCalloc'
C:\DOCUME~1\User\IMPOST~1\Temp\cc6Aa6EI.o:spm_unlink2.c:(.text+0x70): undefined
reference to `mxGetString'
C:\DOCUME~1\User\IMPOST~1\Temp\cc6Aa6EI.o:spm_unlink2.c:(.text+0x9e): undefined
reference to `mxFree'
C:\DOCUME~1\User\IMPOST~1\Temp\cc6Aa6EI.o:spm_unlink2.c:(.text+0xbc): undefined
reference to `mexErrMsgTxt'
C:\DOCUME~1\User\IMPOST~1\Temp\cc6Aa6EI.o:spm_unlink2.c:(.text+0xd1): undefined
reference to `mexErrMsgTxt'
collect2: ld returned 1 exit status


Se compilo con l'opzioni "-c" me lo compila però non mi fa il link a scilab: so1 = link('libunlink.so', 'myunlink', 'c');
restituendomi:

link: Il seg. archivio condiviso non era caricato: non è un'applicazione di Win32 valida.
Allegati
spm_unlink2.zip
(788 Byte) Scaricato 109 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

[42] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 6 mar 2011, 12:18

Per capire l'errore basta leggerlo:

Codice: Seleziona tutto

undefined reference to `mxIsNumeric'

manca un riferimento esterno a un file oggetto o una libreria con quel simbolo instanziato. Quella funzione si trova nella libreria "libmex.so", infatti nei sorgenti includi il file "mex.h".

Un possibile comando per compilarlo sotto Linux è il seguente:

Codice: Seleziona tutto

gcc -fPIC -O2 -shared -o libunlink.so spm_unlink2.c -I/usr/include/scilab -L/usr/lib/scilab -lmex

l'opzione "-I" specifica il percorso dei file include, l'opzione "-L" specifica il percorso delle librerie, l'opzione "-l" specifica la libreria da utilizzare.

Come è scritto chiaramente nel manuale del compilatore GCC l'opzione "-c" compila solamente e genera il file oggetto, non crea nessuna libreria dinamica (anche se ha l'estensione di una libreria dinamica), quindi gli errori a simboli esterni mancanti non vengono giustamente segnalati e se uno lo utilizza come libreria dinamica viene segnalato l'errore che non è una valida libreria dinamica.

Con la funzione di Scilab "ilib_for_link", segnalata in precedenza, genera correttamente la libreria dinamica (almeno sotto Linux non segnalare nessun errore):

Codice: Seleziona tutto

ilib_for_link('myunlink','spm_unlink2.c',[],"c")

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

[43] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 6 mar 2011, 17:54

se compilo scrivendo questo comando (sono in Windows):

Codice: Seleziona tutto

gcc -O2 -shared -o libunlink.so spm_unlink2.c -I C:\Programmi\scilab-5.3.0\modules\mexlib\includes -L C:\Programmi\scilab-5.3.0\libs -lmex


dopo "-I" ho aggiunto il path dove è contenuto il file "mex.h"
mi viene ritornato il seguente errore:

c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: cannot fin
d -lmex
collect2: ld returned 1 exit status

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

[44] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 6 mar 2011, 18:42

L'errore è chiarissimo, basta leggerlo:

Codice: Seleziona tutto

c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: cannot find -lmex

non trova la libreria "mex" (sotto Linux il nome è "libmex.so"), ovviamente dipende dall'opzione "-L''.

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

[45] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 7 mar 2011, 16:02

Ciao, non riesco a fare la call della funzione C che ti ho allegato precedentemente (spm_unlink2.c),
io digito
"call('myunlink', 1, 3, 'i', matname, 4, 'c', "out", [1,1], 2, 'd', 0, 1, 'i');" ma mi ritorna sempre un errore del tipo:
"call: L'argomento in ingresso 14 è di tipo sbagliato: era attesa una matrice reale o complessa."

e non capisco dove sbaglio

THX !!

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

[46] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 7 mar 2011, 21:31

Quella funzione in C non rispetta le convenzioni dei passaggi dei paramenti, per Scilab tutti i parametri devono essere puntatori, usi il tipo 'c' quando non c'è nessun puntatore di caratteri come parametro. Consiglio di leggere meglio la documentazione:

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

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

[47] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 8 mar 2011, 10:27

Anche modificandola in questo modo (allegato) tutto sommato non capisco perché quando faccio la call:
"call('myunlink', matname, 3, 'c', 1, 2, 'i', "out", [1,1], 1, 'c');"
mi restituisce:

Warning !!!
Scilab has found a critical error (EXCEPTION_ACCESS_VIOLATION)
with "call" function.
Save your data and restart Scilab.


matname=
"C:\Documents and Settings\User\Desktop\San Raffaele\Scilab\spm\sssnLaragione_A_MBqcc_f.mat"
Allegati
spm_unlink2.zip
(807 Byte) Scaricato 127 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

[48] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 8 mar 2011, 14:29

E' il minimo che ti può succedere se sbagli a comunicare i tipi e/o i parametri, il programma può saltare in modo brutale. Ad esempio "matname" è una stringa in Scilab ma nel sorgente in C il terzo parametro è un puntatore di puntatori a mxArray, sono totalmente incompatibili. Nei sorgenti in C il secondo parametro "nrhs" è un puntatore a un intero ma poi usi il puntatore come se fosse un intero !!! errore gravissimo.

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

[49] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentefabrileroy » 8 mar 2011, 17:29

hai ragione, il problema è che non riesco a chiamare quella funzione con Scilab, non capisco cosa vuole di input la funzione C. Io so solo che vorrei passargli "matname" e che lei svolgesse il suo compito.

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

[50] Re: Traduzione Matlab-Scilab

Messaggioda Foto Utentexyz » 8 mar 2011, 18:25

Forse non hai letto bene il messaggio 38, la funzione C ha come parametro un puntatore a caratteri per il nome.


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