Domanda

Sto provando a compilare C libreria condivisa da Matlab.Il mio codice di Matlab utilizza un sacco di funzionalità di elaborazione delle immagini.Così, la compilazione va bene, ma quando ho chiamata la dll dalla mia applicazione, mi arrivano messaggi come:

"Undefined funzione o di un metodo" XYZ "per argomenti di input di tipo double".

Ho verificato le mie argomentazioni sono ok-non è un tipo di problema.Così ho provato ad aggiungere %#function XYZ per il mio .m file, ma che non ha aiutato in nessun modo.Allora, ho provato ad usare il -a bandiera nel mio comando di compilazione:

eval(['mcc -v -N -W lib:cshared -d ' clibdir ' -T link:lib -a edge' allFiles]); 

ma non riesce a compilare con:

Depfun di errore:'In grado di individuare con a bordo una funzione in MATLAB percorso'

Ho verificato l'elaborazione di immagini i file sono sul mio computer (che posso eseguire tutto da matlab, con nessun problema) e i miei punti di percorso per la directory che li contiene.

Ho anche provato a copiare il toolbox .m i file nella mia directory di lavoro, ma che rapidamente palloncini in un sacco di file.E, per alcune funzioni, non c'è .m - solo .mex - e non ho trovato un modo per includere un mex file nel mio .dll.

Che cosa mi manca?

È stato utile?

Soluzione

Hai provato compresa l'Immagine Processing Toolbox cartella utilizzando il -a opzione?Per esempio:

mcc ... -a C:\Program Files\MATLAB\R2009a\toolbox\images\images

Secondo il mcc documentazione, tutti i file in questa cartella, oltre a tutti i file in tutte le sottocartelle, vengono aggiunti al CTF di archivio, e la cartella sottostruttura è conservato in CTF archivio.

Se non si desidera includere ogni sottocartella, è possibile caricare solo i file in una cartella utilizzando un carattere jolly:

mcc ... -a C:\Program Files\MATLAB\R2009a\toolbox\images\images\*

Questo può essere necessario se c'è una sottocartella che possono avere funzioni o script che potrebbero ombra quelli nella cartella principale.Per esempio, c'è un edge.m funzione nella cartella principale C:\Program Files\MATLAB\R2009a\toolbox\images\images\, e c'è un ja sottocartella che contiene la lingua Giapponese, file di aiuto (su Windows), uno dei quali è chiamato anche edge.m.Non si desidera che questa sottocartella per essere aggiunto durante la compilazione, in modo che si potrebbe:

  1. Rimuovere la sottocartella temporaneamente, aggiungere la cartella principale senza il jolly opzione per aggiungere le altre sottocartelle che vuoi), poi mettere quella cartella.

  2. Aggiungere la cartella principale con il jolly opzione per aggiungere tutti i file), poi separatamente aggiungere solo le sottocartelle che si desidera (come @strel e private) con un ulteriore -a comando. NOTA:Io sono incerto se aggiungere sottocartelle separatamente mantenere la sottostruttura di cartelle della directory padre in CTF archivio nello stesso modo come l'opzione #1!

Se non si desidera includere un ampio elenco di file che non possono essere utilizzati, si potrebbe invece provare a utilizzare la funzione DEPFUN prima di ottenere un elenco di dipendenze per il codice di MATLAB.Quindi da questo elenco è possibile trovare le specifiche Image Processing Toolbox funzioni il codice usa e includere solo quelli durante la compilazione.Dal momento che hai chiesto espressamente, questo newsgroup thread cita come includere un .mex file:

mcc ... -a imreconstructmex.mexw32  %# For a 32-bit Windows mex file


NOTA: C'è anche un MathWorks bug report Mi sono imbattuto (che avete bisogno di un login per vedere) che parla di un problema di compilazione di applicazioni utilizzando alcuni Image Processing Toolbox funziona su Windows in R2009b.C'è una soluzione data al link di cui sopra.Questo bug è stato risolto, come di R2010a.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top