Компиляция разделяемой библиотеки Matlab с инструментарием обработки изображений - PullRequest
2 голосов
/ 27 сентября 2010

Я пытаюсь скомпилировать c разделяемую библиотеку из matlab.мой код Matlab использует много функций обработки изображений.Итак, компиляция проходит нормально, но когда я вызываю dll из моего приложения, я получаю сообщения типа «Неопределенная функция или метод« XYZ »для входных аргументов типа double».Я проверил мои аргументы в порядке - это не проблема типа.Итак, я попытался добавить% # function XYZ в мой файл .m, но это ничего не помогло.Затем я попытался использовать флаг -a в моей команде компиляции:

eval (['mcc -v -N -W lib: cshared -d' clibdir '-T ссылка: lib -a edge' allFiles]);

, но он не может быть скомпилирован с:

Ошибка Depfun: «Невозможно найти ребро как функцию по пути MATLAB»

Я проверил, что файлы обработки изображений включенымой компьютер (я могу без проблем запускать все из matlab), и мой путь указывает на каталог, в котором они содержатся.

Я также попытался скопировать файлы .m Toolbox в мой рабочий каталог, но это быстрошары в много файлов.и, для некоторых функций, нет .m - просто .mex - и я не нашел способа включить mex-файл в мою .dll.

что мне не хватает?

1 Ответ

2 голосов
/ 27 сентября 2010

Вы пытались включить папку с инструментами обработки изображений, используя опцию -a? Например:

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

Согласно документации mcc все файлы в этой папке, а также все файлы в любых подпапках добавляются в архив CTF, а поддерево папки сохраняется в архиве CTF.

Если вы не хотите включать каждую подпапку, вы можете загружать только файлы в папке, используя шаблон с подстановочными знаками:

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

Это может быть необходимо, если есть подпапка, в которой могут быть функции или сценарии, которые могут скрывать в родительской папке. Например, в родительской папке C:\Program Files\MATLAB\R2009a\toolbox\images\images\ есть функция edge.m, а в подпапке ja содержатся файлы справки по японскому языку (в Windows), одна из которых также называется edge.m. Вы не хотите, чтобы эта подпапка добавлялась при компиляции, поэтому вы можете:

  1. Временно удалите эту подпапку, добавьте родительскую папку без параметра подстановки (чтобы добавить другие нужные вам подпапки), затем верните эту папку обратно.

  2. Добавьте родительскую папку с параметром подстановочных знаков (чтобы добавить только файлы), затем отдельно добавьте только нужные вам подпапки (например, @strel и private) с помощью дополнительной команды -a. ПРИМЕЧАНИЕ. Я не уверен, если добавление подпапок по отдельности будет поддерживать поддерево папок родительского каталога в архиве CTF так же, как это было бы в опции # 1!

Если вы не хотите включать большой список файлов, которые могут не использоваться, вместо этого вы можете попробовать использовать функцию DEPFUN , чтобы сначала получить список зависимостей для вашего кода MATLAB. Затем из этого списка вы можете найти конкретные функции Image Processing Toolbox, которые использует ваш код, и включить их только при компиляции. Поскольку вы специально спросили, в этой теме группы новостей упоминается, как включить файл .mex:

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


ПРИМЕЧАНИЕ: Существует также Отчет об ошибке MathWorks Я наткнулся (который вам необходим для входа в систему), в котором упоминается проблема компиляции приложений с использованием некоторых функций Image Processing Toolbox в Windows в R2009b. Существует обходной путь, приведенный по ссылке выше. Эта ошибка исправлена ​​с R2010a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...