Compilando a Biblioteca Compartilhada do MATLAB com a caixa de ferramentas de processamento de imagem

StackOverflow https://stackoverflow.com/questions/3804585

Pergunta

Estou tentando compilar a biblioteca compartilhada C do MATLAB. Meu código MATLAB usa grande parte da funcionalidade de processamento de imagem. Então, a compilação vai bem, mas quando eu chamo a DLL do meu aplicativo, recebo mensagens como:

"Função indefinida ou método 'xyz' para argumentos de entrada do tipo duplo".

Eu verifiquei meus argumentos estão bem - não é um problema de tipo. Então, eu tentei adicionar %#function XYZ Para o meu arquivo .m, mas isso não ajudou nada. Então, eu tentei usar o -a Bandeira no meu comando compilador:

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

Mas não consegue compilar com:

ERRO DEPFUN: 'Não é possível localizar a borda como uma função no caminho do MATLAB'

Verifiquei os arquivos de processamento de imagem estão no meu computador (posso executar tudo do MATLAB sem nenhum problema) e meu caminho aponta para o diretório que os contém.

Eu também tentei copiar os arquivos .M de caixa de ferramentas no meu diretório de trabalho, mas isso rapidamente entra em muitos arquivos. E, para algumas funções, não há .m - apenas uma .mex - e não encontrei uma maneira de incluir um arquivo mex no meu .dll.

o que estou perdendo?

Foi útil?

Solução

Você já tentou incluir a pasta da caixa de ferramentas de processamento de imagem usando o -a opção? Por exemplo:

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

De acordo com mcc documentação, todos os arquivos nesta pasta, bem como todos os arquivos em qualquer subpasta, são adicionados ao arquivo CTF, e a subárvore da pasta é preservada no arquivo CTF.

Se você não deseja incluir cada subpasta, pode carregar apenas os arquivos em uma pasta usando um padrão curinga:

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

Isso pode ser necessário se houver uma subpasta que possa ter funções ou scripts que possam sombrear os da pasta pai. Por exemplo, existe um edge.m função na pasta pai C:\Program Files\MATLAB\R2009a\toolbox\images\images\, e há um ja subpasta que contém arquivos de ajuda do idioma japonês (no Windows), um dos quais também é chamado edge.m. Você não gostaria que esta subpasta fosse adicionada ao compilar, para poder: também:

  1. Remova essa subpasta temporariamente, adicione a pasta pai sem a opção curinga (para adicionar os outros subpastas que você deseja) e coloque essa pasta de volta.

  2. Adicione a pasta pai com a opção curinga (para adicionar apenas os arquivos) e adicione separadamente apenas as subpastas que você deseja (como @strel e private) com um adicional -a comando. Nota: Não tenho certeza se a adição de subpastas separadamente manterá a subárvore da pasta do diretório pai no arquivo CTF da mesma maneira que a opção 1 faria!

Se você não quiser incluir uma grande lista de arquivos que podem não ser usados, você pode tentar usar a função Depfun Para primeiro obter uma lista de dependências para o seu código MATLAB. Em seguida, a partir desta lista, você pode encontrar as funções específicas da caixa de ferramentas de processamento de imagem que seu código usa e incluir apenas aqueles na compilação. Desde que você perguntou especificamente, Este tópico do grupo de notícias menciona como incluir um arquivo .mex:

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


NOTA: Há também um Relatório de bug do Mathworks Encontrei (que você precisa de um login para ver) que menciona um problema de compilação de aplicativos usando algumas funções da caixa de ferramentas de processamento de imagem no Windows no R2009B. Há uma solução alternativa dada no link acima. Este bug é corrigido a partir do R2010A.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top