1

我试图用液体流动和媒体创建一个 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 吗?

4

1 回答 1

1

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

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

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

于 2016-01-25T23:49:28.470 回答