Компиляция общей библиотеки Matlab с помощью инструментария обработки изображений

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

Вопрос

Я пытаюсь скомпилировать разделяемую библиотеку C из Matlab.Мой код Matlab использует большую часть функций обработки изображений.Итак, компиляция проходит нормально, но когда я вызываю библиотеку dll из своего приложения, я получаю сообщения типа:

"Неопределенная функция или метод 'XYZ' для входных аргументов типа double".

Я убедился, что мои аргументы в порядке - это не проблема типа.Итак, я попробовал добавить %#function XYZ в мой файл .m, но это ничему не помогло.Затем я попробовал использовать -a установите флажок в моей команде компиляции:

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

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

Ошибка удаления:"Не удается найти edge как функцию в пути MATLAB"

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

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

Что я упускаю из виду?

Это было полезно?

Решение

Вы пробовали включить папку Image Processing Toolbox с помощью -a вариант?Например:

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

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

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

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

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

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

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

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

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


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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top