如何加载在Matlab中创建的共享库

时间:2016-01-25 14:30:50

标签: matlab modelica openmodelica

我尝试使用液体流和媒体创建一个OpenModelica模型。 我在Matlab中有一个函数来计算pdetool中的PDE(偏微分方程)。 我想通过MCR在Matlab中创建一个共享动态库(.so文件)并将其加载到模型中。 我的平台:在Linux或Mac OS上使用的OpenModelica。安装了Linux和Mac OS上的MCR。

在Matlab中,我只能生成DLL(可能生成libmyfunc.so吗?)。

当我尝试使用extern 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吗?

1 个答案:

答案 0 :(得分:1)

我对Linux没有太多经验,但我在Windows中使用MCR做了同样的事情。看一下这个: http://de.mathworks.com/matlabcentral/answers/94471-how-do-i-create-a-c-c-shared-library-with-matlab-compiler-that-can-be-used-in-a-microsoft-visual-c

执行此操作时,您将获得DLL和静态库。您需要将它们复制到modelica代码所在的文件夹中,然后在调用外部函数的modelica函数的“库”中设置库。

请记住,如果您使用的是64位或32位dymola,则应该使用相同版本的matlab相应地创建DLL。