Я попытался создать модель OpenModelica с потоком жидкости и носителем. И у меня есть функция в Matlab, которая вычисляет PDE (уравнение с частными производными) в pdetool. Я хотел бы создать общую динамическую библиотеку (.so-файл) в Matlab с помощью MCR и загрузить ее в модель. Моя платформа: OpenModelica, используемая на Linux или Mac OS. MCR на Linux и Mac OS.Как загрузить общую библиотеку, созданную в Matlab
В Matlab я могу сгенерировать только DLL (возможно, можно создать libmyfunc.so?).
Когда я пытаюсь скомпилировать модель с экстерном функцией C Я получил ошибку:
#omc +s test_matlab_so.mo func_mathlab.mo
#make -f test_matlab_so.makefile
/usr/bin/clang -Wimplicit-function-declaration -O0 -falign-functions -march=native -I"/opt/openmodelica/include/omc/c" -I. -DOPENMODELICA_XML_FROM_FILE_AT_RUNTIME -c -o test_matlab_so_functions.o test_matlab_so_functions.c
clang: warning: optimization flag '-falign-functions' is not supported
clang: warning: argument unused during compilation: '-falign-functions'
In file included from test_matlab_so_functions.c:7:
In file included from ./test_matlab_so_includes.h:4:
./shared_train/src/lib_summ.c:90:8: warning: implicit declaration of function 'GetModuleFileName' is invalid in C99 [-Wimplicit-function-declaration]
if (!GetModuleFileName(GetModuleHandle("lib_summ"), path_to_dll, _MAX_PATH))
^
./shared_train/src/lib_summ.c:90:26: warning: implicit declaration of function 'GetModuleHandle' is invalid in C99 [-Wimplicit-function-declaration]
if (!GetModuleFileName(GetModuleHandle("lib_summ"), path_to_dll, _MAX_PATH))
^
./shared_train/src/lib_summ.c:90:55: error: use of undeclared identifier 'path_to_dll'
if (!GetModuleFileName(GetModuleHandle("lib_summ"), path_to_dll, _MAX_PATH))
^
./shared_train/src/lib_summ.c:90:68: error: use of undeclared identifier '_MAX_PATH'
if (!GetModuleFileName(GetModuleHandle("lib_summ"), path_to_dll, _MAX_PATH))
^
./shared_train/src/lib_summ.c:94:37: error: use of undeclared identifier 'path_to_dll'
mclGetEmbeddedCtfStream(path_to_dll);
^
test_matlab_so_functions.c:19:16: warning: implicit declaration of function '_mlfSumm' is invalid in C99 [-Wimplicit-function-declaration]
_v_out_ext = _mlfSumm(_v_a_ext, _v_b_ext);
^
3 warnings and 3 errors generated.
make: *** [test_matlab_so_functions.o] Error 1
Может кто-то помочь мне с интеграцией OpenModelica и Matlab?
Благодарим вас за ответ. Согласно документу Matlab и документации OpenModelica об использовании функций extern C мне нужно сделать 1) создать общий lib в Matlab. 2) Напишите простую c-оболочку c для инициализации процедуры MCR и вызовите мою общую lib. 3) Вызовите мою оболочку C из OpenModelica. Правильно ли это? – vserge
Да, точно. Я создал две разделяемые библиотеки один из моего файла matlab, а другой - из оболочки c, которую я тогда использовал в Dymola. – Shaga
Благодарю вас! Мы сделали это, но получили следующую проблему: загрузить dll в Linux;) – vserge