Совместное использование файла mex64 на разных компьютерах - PullRequest
0 голосов
/ 08 апреля 2010

У меня есть mex64 dll, скомпилированная на моей машине. Я использовал Matlab 2009b с VS2008 Pro для компиляции DLL. DLL работает нормально на моей установке Matlab.

Я хочу, чтобы коллега использовал dll, поэтому я отправил его ему, и он получает следующее сообщение об ошибке при попытке использовать dll:

??? Неверный MEX-файл 'filename.mexw64': указанный модуль не найден.

Мое текущее предположение состоит в том, что это вызвано тем, что он использует более старую версию Matlab или пропустил мою dll. Я запустил проверку зависимостей и попросил его проверить, есть ли у него все перечисленные dll.

Я все еще жду, когда он подтвердит свою версию Matlab.

Какие еще причины могут быть причиной этого и может ли версия Matlab изменить ситуацию? (Я имею в виду R2009a, когда у меня R2009B, а не огромная версия diff)


У другого человека есть Matlab R2009a. Разве мекс не должен просто работать, если я скомпилирую его на своем компьютере и доставлю ему?

Это оставляет только недостающую зависимую DLL?

Ответы [ 4 ]

1 голос
/ 21 августа 2012

Проблема странная, но я могу подтвердить, что она существует.

Используя предварительно собранные библиотеки для matlab, которые правильно установлены и находятся в пути, я иногда получаю ту же ошибку. Если я введу имя функции в командной строке, функция будет видимой и будет автоматически завершена. Тем не менее, функция не будет инициализироваться, пока я не 'cd' в каталог с файлом библиотеки .mexw64.

>> AndorInitialize('')
Invalid MEX-file 'C:\Program
Files\MATLAB\R2011b\toolbox\andor\AndorInitialize.mexw64': The
specified module could not be found.

>> path

        MATLABPATH

    C:\Program Files\MATLAB\R2011b\toolbox\andor
    C:\Program Files\MATLAB\R2011b\toolbox\andor\camera files
    C:\Program Files\MATLAB\R2011b\toolbox\andor\m files
    ... etc

Оказывается, это связано с отсутствием зависимостей, которые не должны отсутствовать. Чтобы решить эту проблему, используйте средство обхода зависимостей (бесплатно, облегченно), чтобы определить, чего не хватает. Математика объясняет это.

http://www.mathworks.com/support/solutions/en/data/1-2RQL4L/

В моем случае две DLL не отображались должным образом, даже если они были в моей системе и в пути. Я скопировал DLL в папку windows / system32, и теперь функции библиотеки работают правильно. Что особенно странно, такая же библиотека работала на моем компьютере несколько дней назад (до перемещения DLL).

0 голосов
/ 09 апреля 2010

Другим возможным источником проблемы может быть то, что вы скомпилировали в режиме отладки. Распространяемые файлы Visual C ++ поддерживают только режим выпуска.

0 голосов
/ 25 апреля 2010

Dll была оболочкой для доступа к MySql. В итоге мы использовали ODBC от Matlab и MySql Connector.

0 голосов
/ 09 апреля 2010

Как правило, MEX-файлы должны работать в разных версиях Matlab; в частности, они должны быть совместимы с форвардом. Ты прав; звучит как проблема DLL.

Если вы создали его с помощью Visual Studio, он может быть связан со средой выполнения Visual C ++. Это набор библиотек, который не установлен в Windows по умолчанию. «Вторично распространяемый» для него можно скачать здесь ; установка вашего коллеги может решить проблему. Если это не сработает, вы можете использовать Dependency Walker для проверки других неудовлетворенных зависимостей DLL.

Обычно, настройка "mex -setup" Matlab для использования компилятора Lcc, который распространяется с Matlab, могла бы быть способом обойти это, но это не поддерживается для 64-битной Windows AFAIK.

Кроме того, вы уверены, что у него установлена ​​64-битная версия Windows?

...