Error using loadlibrary matlab

I am trying to load a shared library from the sample code provided in the matlab documentation. addpath(fullfile(matlabroot,'extern','examples','shrlib')) if not(libisloaded('shrlibsample')...

Sandeep

I am trying to load a shared library from the sample code provided in the matlab documentation.

addpath(fullfile(matlabroot,‘extern’,‘examples’,‘shrlib’))

if not(libisloaded(‘shrlibsample’))

loadlibrary(‘shrlibsample’)

end

But when it tries to load the library i get an error:

Error using loadlibrary

The MATLAB program file describing your library could not be found, possible Perl or file system error.

Any help is appreciated.

Accepted Answer

Sandeep

Edited: Sandeep

on 26 Jul 2016

I Finally found the solution for this problem. This was caused by a space/carriage return in the Path value of the Environment variable. It was not evident when I manually checked the path. Then i copied it to Notepad++ and found there was a space and a carriage return. Replaced the Path value with the edited path value(removing space and carriage return). Now the loadlibrary function works fine.

PS: The attached image has the markings about what i am talking about. The problem is only with WindowsPowershellV1.0. Ignore the rest.


More Answers (3)

Toby Dewhurst

I had a very similar problem: When I tried,

addpath(fullfile(matlabroot,‘extern’,‘examples’,‘shrlib’))

if not(libisloaded(‘shrlibsample’))

loadlibrary(‘shrlibsample’)

end

I got:

Error using loadlibrary

Too many output arguments.

Following @Philip Borghesani’s suggestion, I found that it was the «perl» command that was broken (returning too many outputs).

The problem turned out to be that MATLAB’s built-in perl.m was shadowed by a perl.m in a toolbox I had downloaded from a third party.


Philip Borghesani

Something quite odd is going on, This error is caused by a timeout waiting for the prototype file to be visible to MATLAB after supposedly successful creation. I have only questions and suggestions.

  • If your current directory is not writable by you try changing to one that is.
  • Make sure your tempdir is writable and the disk is not full
  • If nether of these helps or is the problem try using the m_filename option to loadlibrary to specify the name and location of the prototype file that will be generated.
  • If all else fails contact support.

Jan Niklas Caspers

Any responses from Matlab Support? Have the same error and tried all steps here.

Rukhlenko

Пользователь
Сообщения: 284
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Loadlibrary: Error Message

Недавно случайно обнаружил, что можно обращаться к внешним DLL функциям непосредственно из Матлаба с помощью функций loadlibrary, Calllib. Однако при попытке запустить тестовый пример из doc_loadlibrary:

addpath([matlabroot ‘externexamplesshrlib’])

loadlibrary shrlibsample shrlibsample.h

получаю сообщение об ошибке:

??? Error using ==> loadlibrary

Failed to preprocess the input file.

Output from preprocessor is:’C:Program’ is not recognized as an internal or external command,

operable program or batch file.

В чем может быть причина?

Версия MATLAB:

————————————————————————————-

MATLAB Version 7.0.4.365 (R14) Service Pack 2

MATLAB License Number: xxxxxx

Operating System: Microsoft Windows XP Version 5.1 (Build 2600: Service Pack 2)

Java VM Version: Java 1.5.0 with Sun Microsystems Inc. Java HotSpot(TM) Client VM

————————————————————————————-

MATLAB Version 7.0.4 (R14SP2)

Simulink Version 6.2.1 (R14SP2+)

Excel Link Version 2.2.2 (R14SP2)

Genetic Algorithm Direct Search Toolbox Version 1.0.2 (R14SP1)

Image Processing Toolbox Version 5.0.2 (R14SP2)

Optimization Toolbox Version 3.0.2 (R14SP2)

Real-Time Workshop Version 6.2.1 (R14SP2+)

Signal Processing Toolbox Version 6.3 (R14SP2)

Statistics Toolbox Version 5.0.2 (R14SP2)

Symbolic Math Toolbox Version 3.1.2 (R14SP2)

Заранее благодарен

Александр

Последний раз редактировалось Rukhlenko Пт янв 13, 2006 10:27 pm, всего редактировалось 1 раз.


gok

Пользователь
Сообщения: 127
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение gok » Пт янв 13, 2006 10:14 pm

Хм. У меня нормально загрузилась (MATLAB Version 7.1.0.246 (R14) Service Pack 3) Есть sp3, попробуй с ним.

(Я бы номер лицензии не выставлял)

life would be so much easier if we could just look at the source code


Rukhlenko

Пользователь
Сообщения: 284
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение Rukhlenko » Пт янв 13, 2006 10:36 pm

gok писал(а):Хм. У меня нормально загрузилась (MATLAB Version 7.1.0.246 (R14) Service Pack 3) Есть sp3, попробуй с ним.
(Я бы номер лицензии не выставлял)

Я думаю, дело не в сервис-паке. Проверил сейчас дома:

МATLAB Version 7.0.1.24704 (R14) Service Pack 1

MATLAB License Number: xxxxxx

Operating System: Microsoft Windows XP Version 5.1 (Build 2600: Service Pack 2)

Java VM Version: Java 1.4.2_04 with Sun Microsystems Inc. Java HotSpot(TM) Client VM

Нормально запустилось. Есть одна мысль, но может, это глупость. На двух машинах, где работает, Матлаб поставлен в корневом каталоге. Там же, где не работает, — в поддиректории Program Files. Может быть, причина связана с этим?

Справедливости ради надо отметить, что на всех машинах стоят слегка разные версии МАТЛАБ 7.

P.S. Самое смешное, что понятия не имею, как кто-то смог поставить МАТЛАБ в Program Files. Когда я пытался это сделать дома, инсталлятор ругался, что имя директории не должно содержать пробелы, то есть Program Files не проходит.


sandy

Эксперт
Сообщения: 5601
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение sandy » Сб янв 14, 2006 11:00 am

MATLAB стал понимать каталоги с пробелами начиная с R14SP2

С уважением

Александр Сергиенко


Rukhlenko

Пользователь
Сообщения: 284
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение Rukhlenko » Сб янв 14, 2006 12:02 pm

sandy писал(а):MATLAB стал понимать каталоги с пробелами начиная с R14SP2

Спасибо за разъяснение — буду иметь в виду. Хотел бы возвратиться к исходному вопросу: почему не работает loadlibrary и может ли это быть связано с путем к МАТЛАБу. Надо что-то пытаться делать с этим в понедельник. Рассчитываю на какую-то дополнительную информацию к этому времени. Хотя бы найти кого-то с точно такой же версией МАТЛАБа для проверки ситуации.


Rukhlenko

Пользователь
Сообщения: 284
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение Rukhlenko » Пн янв 16, 2006 1:59 pm

Rukhlenko писал(а):

sandy писал(а):MATLAB стал понимать каталоги с пробелами начиная с R14SP2

Спасибо за разъяснение — буду иметь в виду. Хотел бы возвратиться к исходному вопросу: почему не работает loadlibrary и может ли это быть связано с путем к МАТЛАБу. Надо что-то пытаться делать с этим в понедельник. Рассчитываю на какую-то дополнительную информацию к этому времени. Хотя бы найти кого-то с точно такой же версией МАТЛАБа для проверки ситуации.

Проблема решилась после установки версии 7.1 SP3 в корневой каталог. Причина осталась невыясненной, что именно помогло: обновление версии или установка в корневой каталог. :?


This is a follow-up on issue #1.

I run TwoCircTrailer (I run it from inside nmpc-codegen-matlab/demos) and I first get following log messages:

GENERATING output folders of controller:
GENERATING PANOC
GENERATING static globals
GENERATING python interface
GENERATING Build system
Generating globals file at: ../test_controller_builds/demo_controller_matlab/globals/globals_dyn.h
generating g-type function

ans = 

  Source_file_generator with properties:

         location: '../test_controller_builds/demo_controller_matlab/casadi/g.c'
    function_type: 'g'

generating proxg-type function

ans = 

  Source_file_generator with properties:

         location: '../test_controller_builds/demo_controller_matlab/casadi/proxg.c'
    function_type: 'proxg'

but then there seem to be some issues with compilation…

cmake: /usr/local/MATLAB/R2017a/bin/glnxa64/libcurl.so.4: no version information available (required by cmake)
-- The C compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detected the following casadi files: cost_function_derivative_combined.c;cost_function.c;integrator.c
-- No main.c detected in project root folder
-- Configuring done
-- Generating done
-- Build files have been written to: /home/chung/Documents/nmpc-codegen-matlab/test_controller_builds/demo_controller_matlab/build
cmake: /usr/local/MATLAB/R2017a/bin/glnxa64/libcurl.so.4: no version information available (required by cmake)
/usr/bin/cmake: /usr/local/MATLAB/R2017a/bin/glnxa64/libcurl.so.4: no version information available (required by /usr/bin/cmake)
/usr/bin/cmake: /usr/local/MATLAB/R2017a/bin/glnxa64/libcurl.so.4: no version information available (required by /usr/bin/cmake)
/usr/bin/cmake: /usr/local/MATLAB/R2017a/bin/glnxa64/libcurl.so.4: no version information available (required by /usr/bin/cmake)
/usr/bin/cmake: /usr/local/MATLAB/R2017a/bin/glnxa64/libcurl.so.4: no version information available (required by /usr/bin/cmake)
Scanning dependencies of target PANOC_lib
/usr/bin/cmake: /usr/local/MATLAB/R2017a/bin/glnxa64/libcurl.so.4: no version information available (required by /usr/bin/cmake)
[  7%] /usr/bin/cmake: /usr/local/MATLAB/R2017a/bin/glnxa64/libcurl.so.4: no version information available (required by /usr/bin/cmake)
Building C object PANOC/CMakeFiles/PANOC_lib.dir/proximal_gradient_descent.c.o
/usr/bin/cmake: /usr/local/MATLAB/R2017a/bin/glnxa64/libcurl.so.4: no version information available (required by /usr/bin/cmake)
[ 15%] /usr/bin/cmake: /usr/local/MATLAB/R2017a/bin/glnxa64/libcurl.so.4: no version information available (required by /usr/bin/cmake)
Building C object PANOC/CMakeFiles/PANOC_lib.dir/buffer.c.o
/usr/bin/cmake: /usr/local/MATLAB/R2017a/bin/glnxa64/libcurl.so.4: no version information available (required by /usr/bin/cmake)
[ 23%] /usr/bin/cmake: /usr/local/MATLAB/R2017a/bin/glnxa64/libcurl.so.4: no version information available (required by /usr/bin/cmake)
Building C object PANOC/CMakeFiles/PANOC_lib.dir/casadi_interface.c.o
In file included from /home/chung/Documents/nmpc-codegen-matlab/test_controller_builds/demo_controller_matlab/PANOC/casadi_interface.c:3:0:
/home/chung/Documents/nmpc-codegen-matlab/test_controller_builds/demo_controller_matlab/PANOC/../casadi/cost_function_derivative_combined.h:12:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
 CASADI_SYMBOL_EXPORT void cost_function_derivative_combined_incref(void);
                      ^
/home/chung/Documents/nmpc-codegen-matlab/test_controller_builds/demo_controller_matlab/PANOC/../casadi/cost_function_derivative_combined.h:13:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
 CASADI_SYMBOL_EXPORT void cost_function_derivative_combined_decref(void);
                      ^
/home/chung/Documents/nmpc-codegen-matlab/test_controller_builds/demo_controller_matlab/PANOC/../casadi/cost_function_derivative_combined.h:14:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
 CASADI_SYMBOL_EXPORT int cost_function_derivative_combined_n_out(void);
                      ^
/home/chung/Documents/nmpc-codegen-matlab/test_controller_builds/demo_controller_matlab/PANOC/../casadi/cost_function_derivative_combined.h:15:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
 CASADI_SYMBOL_EXPORT int cost_function_derivative_combined_n_in(void);
                      ^
/home/chung/Documents/nmpc-codegen-matlab/test_controller_builds/demo_controller_matlab/PANOC/../casadi/cost_function_derivative_combined.h:16:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘const’
 CASADI_SYMBOL_EXPORT const char* cost_function_derivative_combined_name_in(int i);
                      ^
/home/chung/Documents/nmpc-codegen-matlab/test_controller_builds/demo_controller_matlab/PANOC/../casadi/cost_function_derivative_combined.h:17:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘const’
 CASADI_SYMBOL_EXPORT const char* cost_function_derivative_combined_name_out(int i);
                      ^
/home/chung/Documents/nmpc-codegen-matlab/test_controller_builds/demo_controller_matlab/PANOC/../casadi/cost_function_derivative_combined.h:18:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘const’
 CASADI_SYMBOL_EXPORT const int* cost_function_derivative_combined_sparsity_in(int i);
                      ^
/home/chung/Documents/nmpc-codegen-matlab/test_controller_builds/demo_controller_matlab/PANOC/../casadi/cost_function_derivative_combined.h:19:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘const’
 CASADI_SYMBOL_EXPORT const int* cost_function_derivative_combined_sparsity_out(int i);
                      ^
/home/chung/Documents/nmpc-codegen-matlab/test_controller_builds/demo_controller_matlab/PANOC/../casadi/cost_function_derivative_combined.h:20:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
 CASADI_SYMBOL_EXPORT int cost_function_derivative_combined_work(int *sz_arg, int* sz_res, int *sz_iw, int *sz_w);
                      ^
make[3]: *** [PANOC/CMakeFiles/PANOC_lib.dir/casadi_interface.c.o] Error 1
make[2]: *** [PANOC/CMakeFiles/PANOC_lib.dir/all] Error 2
make[1]: *** [CMakeFiles/python_interface.dir/rule] Error 2
make: *** [python_interface] Error 2
Loading nmpc_panoc library n
Error using loadlibrary
There was an error loading the library "../test_controller_builds/demo_controller_matlab/build/libpython_interface.so"
../test_controller_builds/demo_controller_matlab/build/libpython_interface.so: cannot open shared object file: No such file or directory

Error in nmpccodegen.tools.Simulator/load_library (line 77)
                [notfound,warnings] = loadlibrary(lib_file_name,lib_file_header_name,'alias','nmpc_panoc');

Error in nmpccodegen.tools.Simulator (line 104)
            obj.load_library();

Error in simulate_demo_trailer (line 9)
    sim = nmpccodegen.tools.Simulator(trailer_controller.location);

Error in TwoCircTrailer (line 47)
[ state_history,time_history,iteration_history,input_history,~ ] = simulate_demo_trailer(trailer_controller,initial_state,...

Caused by:
    Error using loaddefinedlibrary
    ../test_controller_builds/demo_controller_matlab/build/libpython_interface.so: cannot open shared object file: No such file or directory

I suspect this is because it doesn’t find CASADI_SYMBOL_EXPORT.

 

использование DLL в Matlab

Сообщение13.04.2017, 11:54 


07/10/15

2400

Добрый день,
подскажите пожалуйста, почему .dll функция, скомпилированная из .m файла не запускается в среде matlab
при обращении к ней выдаётся сообщение следующего содержания:

Цитата:

Undefined function ‘Q_fil’ for input arguments of type ‘double’

то есть Matlab её как бы и не видит, но компиляция прошла нормально, без ошибок (выполнялась с помощью Matlab Compiller, с подключенным внешним компилятором VC2010)

сама исходная функция Q_fil.m в Matlab работает нормально, только слишком медленно (собственно из за этого и компилирую)

в чём здесь может быть ошибка (у меня Matlab 2013a x64)

Профиль  

Karan 

Posted automatically

Сообщение13.04.2017, 12:16 

Модератор


19/10/15
1196


 i 
Тема перемещена из форума «Computer Science» в форум «Околонаучный софт»

Профиль  

GAA 

 Re: использование DLL в Matlab

Сообщение13.04.2017, 18:05 

Заслуженный участник


12/07/07
4257

Andrey_Kireew

, а функция при помощи loadlibrary загружалась? Если таким способом, то что возвращает libfunctions?

(И лучше сразу весь текст загрузки функции привести.)

Профиль  

Andrey_Kireew 

Re: использование DLL в Matlab

Сообщение13.04.2017, 23:09 


07/10/15

2400

Про loadlibrary ничего не слышал, думал запускать нужно так же как и .m функцию, просто из командной строки matlab.

Сейчас попробовал, что то заработало, выполняю команды:

Код:

>> hfile = fullfile(‘C:’,’Users’,’User’,’Documents’,’MATLAB’,’Q_filt.h’);
>> loadlibrary(‘Q_filt’,hfile)

выдаёт предупреждение

Код:

Warning: Warnings messages were produced while parsing.  Check the
functions you intend to use for correctness.  Warning text can be viewed
using:
[notfound,warnings]=loadlibrary(…)
> In loadlibrary at 344
Warning: The data type ‘FcnPtr’ used by function
Q_filtInitializeWithHandlers does not exist.
> In loadlibrary at 403
Warning: The data type ‘FcnPtr’ used by function
Q_filtInitializeWithHandlers does not exist.
> In loadlibrary at 403

смотрю какие функции загрузились

Код:

>> libfunctions(‘Q_filt’)

Functions in library Q_filt:

Q_filtInitialize              mlfQ_filt                     
Q_filtInitializeWithHandlers  mlxQ_filt                     
Q_filtPrintStackTrace         
Q_filtTerminate               

как запускать не пойму, пробовал так

Код:

>> out =calllib(‘Q_filt’,’Q_filtPrintStackTrace’,x,3,1001,0.5);
Error using calllib
No method with matching signature.

ничего не получается, вообще всё намного сложнее чем я ожидал …
подскажите пожалуйста как сделать чтобы всё таки заработало

Профиль  

Geen 

Re: использование DLL в Matlab

Сообщение14.04.2017, 00:23 

Заслуженный участник
Аватара пользователя


01/09/13
3343

В прежних версиях я просто компилировал C код с подключением библиотек MatLab’а из любого стандартного компилятора… работает пока.

Профиль  

Andrey_Kireew 

Re: использование DLL в Matlab

Сообщение14.04.2017, 02:02 


07/10/15

2400

Однако тема здесь об обратном.

Саму библиотеку я могу полностью написать на С++, но работать с ней хотелось бы в среде Matlab, так будет проще и намного быстрее исследовать алгоритм.

Где то в сети прочитал, что matlab запросто работает с dll и обращаться к ним можно как к обычным m — функциям. Теперь оказывается её сначала нужно загружать, а потом ещё как то запустить содержащуюся в ней функцию.

Профиль  

Geen 

 Re: использование DLL в Matlab

Сообщение14.04.2017, 10:24 

Заслуженный участник
Аватара пользователя


01/09/13
3343

Саму библиотеку я могу полностью написать на С++, но работать с ней хотелось бы в среде Matlab, так будет проще и намного быстрее исследовать алгоритм.

Именно, Вы пишите критические блоки на C (C++) и вызываете их как функции из MatLab’а без всяких «подгрузок» (просто dll’ка должна содержать mexFunction, через которую и производится вызов)

— 14.04.2017, 10:33 —

https://www.mathworks.com/help/matlab/c … les-1.html

Профиль  

GAA 

 Re: использование DLL в Matlab

Сообщение14.04.2017, 10:58 

Заслуженный участник


12/07/07
4257

Где то в сети прочитал, что matlab запросто работает с dll и обращаться к ним можно как к обычным m — функциям.

В старых версиях loadlibrary не было (но в R2013 уже есть). loadlibrary предназначена для преодоления ограничений стандартного способа вызова внешних функций (mex — Matlab EXternal). В простейших случаях в явной загрузке необходимости нет. Для старых версий описание на русском можно найти в книге Мартынов Н.Н., Иванов А.П. “Matlab 5.X. Вычисления, визуализация, программирование” (легко нагуглить электронную версию в сети).

[Upd]

loadlibrary c 7-ой версии.[/Upd]

По теме. Andrey_Kireew

, приведите детали. Иначе трудно угадать.

Профиль  

Andrey_Kireew 

 Re: использование DLL в Matlab

Сообщение14.04.2017, 11:53 


07/10/15

2400

Именно, Вы пишите критические блоки на C (C++) и вызываете их как функции из MatLab’а без всяких «подгрузок» (просто dll’ка должна содержать mexFunction, через которую и производится вызов)

Да нет, Вы не поняли, я не писал блоки на С++, эта функция написана в matlab в виде m — файла. Там была всего одна функция Q_filt.m, откуда в библиотеке появилось несколько — пока понять не могу. Компиляция вся проводилась в среде матлаб, с помощью Matlab Comoiller. EXE файлы он создаёт запросто, но для .dll требует внешний компилятор. Я указал VC2010, т.к. у меня есть только он. Вообще есть все основания полагать, что при таком подходе всё необходимое для запуска в matlab должно создаваться само. Попробую ещё разок откомпилировать поменяв настройки.

За ссылку спасибо — почитаю. Но судя по всему там именно о том что вы говорите, т.е. о внешних файлах, написанных на С++. В перспективе конечно я думаю так и сделать, так как это позволит максимально оптимизировать код. Но пока мне хотелось бы скомпилировать m — функцию непосредственно, чтобы понять какой выигрыш даёт компиляция и на что можно рассчитывать.

Профиль  

Geen 

Re: использование DLL в Matlab

Сообщение14.04.2017, 12:18 

Заслуженный участник
Аватара пользователя


01/09/13
3343

Но пока мне хотелось бы скомпилировать m — функцию непосредственно

Перепишите (напишите) на C именно эту функцию — Вы наверняка сумеете написать её более оптимально чем «конвёртер» из m в C.

понять какой выигрыш даёт компиляция и на что можно рассчитывать.

Выигрыш может быть несколько порядков (зависит и от самой функции и от её использования).

Профиль  

Andrey_Kireew 

Re: использование DLL в Matlab

Сообщение14.04.2017, 12:45 


07/10/15

2400

Это будет не так быстро, а посмотреть хочется уже сейчас

я вот перекомпилировал с другим именем, и она вроде как стала работать

Код:

>> out =calllib(‘QF’,’mlxQ_filt’,x,3,1001,0.5);
Error using calllib
Parameter must be scalar.

если вместо x ввожу число — она возвращает 0 и никаких ошибок, но x — это вектор и возвращать она должна вектор

при компиляции выдаётся предупреждение

Код:

>> warnings
warnings =
QF.h  Type ‘intvoidPtr__ptr64’ was not found.  Defaulting to type error.  Found on line 11585 of input from line 290 of file C:\Program Files (x86)\Microsoft

может в этом дело?

Профиль  

GAA 

 Re: использование DLL в Matlab

Сообщение14.04.2017, 22:20 

Заслуженный участник


12/07/07
4257

1. В старых версиях

Matlab можно было создать dll из командного окна.
Традиционный простейший пример. Matlab 6.5. Допустим в текущей директории имеется m-функция

function Res = MyAdd(X, Y)
 Res = X + Y;

Если «выбран» компилятор, то после ввода в командном окне
>> mcc -x MyAdd
в текущей директории будут созданы файлы: myadd.c, myadd.h, myadd_mex.c, MyAdd.dll
Теперь «для чистоты эксперимента» спрячем MyAdd.m (удалим или перенесём туда, где Matlab её не найдёт). Затем убедимся, что всё работает

>> X = [1, 2]; Y = [1, 2]; MyAdd(X, Y)
ans =
     2     4

(В прятанье нет необходимости: если при вызове функции в одной директории будет найден и m-файл, и dll, то выполнится функция из dll, в соответствии с написанным в Мартынове и Иванове.)

2. В новых версиях

(в том числе R2013 64бит) в описанной вами задаче вместо dll используются бинарные mex-файлы. Компилировать из командного окна см. mex. Тогда вызов функции будет, как и в старых версиях (c mex-dll), просто по имени функции.

— Пт 14.04.2017 21:59:10 —

Грубо говоря, бинарные mex — [64-битный] аналог mex-dll старых версий.

Профиль  

GAA 

 Re: использование DLL в Matlab

Сообщение15.04.2017, 01:04 

Заслуженный участник


12/07/07
4257

На вопрос начального сообщения

то есть Matlab её как бы и не видит

Под 32-битной Windows расширение исполняемого mex файла — mexw32. Под 64-битной Windows — mexw64. Желательно проверить для конкретной версии, но скорее всего так и есть.

Профиль  

GAA 

 Re: использование DLL в Matlab

Сообщение15.04.2017, 10:36 

Заслуженный участник


12/07/07
4257

Компиляция вся проводилась в среде матлаб, с помощью Matlab Comoiller. EXE файлы он создаёт запросто, но для .dll требует внешний компилятор. Я указал VC2010, т.к. у меня есть только он.

Это не понятно. Вроде lcc идёт только с 32-битной версией (и это все равно внешний компилятор). С 64-битной он не идёт (и согласно сведениям на сайте MathWorks, и сам только что на одном из компьютеров проверил для R2013b 64bit). Скорее всего mcc просто использовал единственный доступный из совместимых компиляторов (или просто единственный доступный).
upd

По поводу использования mcc компилятора. Тут возможно я не прав. И так было в старых версиях.upd

— Сб 15.04.2017 10:08:06 —

Andrey_Kireew в [url=http://dxdy.ru/post1209378.html#p1209378] писал(а):

может в этом дело?

Понятно, что работать не будет. :) На компе с R2013 (где я могу попробовать) деинсталлирован VC, поэтому содержательного ничего не скажу. Я бы попробовал исполняемый mex сделать из среды matlab и если ошибка повториться, то написать в тему — может найдутся участники с установленным VC.

(К слову, ни VC 2010 Redistributable, ни VC 2013 Redistributable в список поддерживаемых matlab компиляторов не входит и использовать его у меня не получилось.)

Профиль  

Andrey_Kireew 

 Re: использование DLL в Matlab

Сообщение15.04.2017, 15:29 


07/10/15

2400

Да, я тоже хочу его сделать, но не получается.
Пришлите мне, пожалуйста, ссылку на какой-нибудь рабочий пример.
Из help matlab я ничего так и не понял (в смысле как компилировать в mex)

Вот здесь очень обнадеживающе написано как его сделать из m-файла
http://www.studfiles.ru/preview/5543674/page:4/
Но у меня ничего не вышло.
Команда

Код:

>> mex -setup

проходит нормально.
Кстати, тут написано, что VC 2010 Professional поддерживается (у меня RТMRel — тоже наверно должен работать)
SystemRequirements-Release2013a_SupportedCompilers.pdf

Команда

Код:

>> mcc  Q_filt

уже не работает, пишет, что не определён тип целевого приложения.

Опытным путём дошел вот до чего

Код:

>> mcc -win64 -W cpplib:QF -T link:lib -d C:UsersUserDocumentsMATLABQFsrc  C:UsersUserDocumentsMATLABCardiстат_тестыQ_filt.m

И она работает: в папке C:UsersUserDocumentsMATLABQFsrc появляются dll и всё остальное.

Может нужно просто что-то изменить в этой строке, чтобы появлялся mex — файл?

Профиль  

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы

Понравилась статья? Поделить с друзьями:
  • Error using imhist expected input number 1 i or x to be two dimensional
  • Error using horzcat dimensions of matrices being concatenated are not consistent матлаб
  • Error username is already in use please choose another one
  • Error user with this e mail already exist
  • Error user with such email already exists