如何正确管理dll Matlab路径

37视图(30天)
在Windows上,我建立一个墨西哥人“myFcn_mex”,链接到一个DLL函数”myLib。通过导入库dll”“myLib.lib”。我有以下的目录结构:
% MY_PROJECT_BASE % \ bin \ \ x86_64获胜
myLib.dll
myLib.lib
% MY_PROJECT_BASE % \ src \包括
myLib.h
% MY_PROJECT % \ src \ matlab
myFcn.m
我的Matlab代码如下:
函数myFcn
如果~ coder.target (MATLAB的)
projectBase = getenv (“MY_PROJECT_BASE”);
includePath = [projectBase filesep“src”filesep“包括”];
libPath = [projectBase filesep“本”filesep“赢”filesep“x86_64”];
库名=“myLib.lib”;
coder.ceval (“myFcn”);
coder.cinclude (“myLib.h”);
coder.updateBuildInfo (“addIncludePaths”,includePath);
coder.updateBuildInfo (“addLinkObjects”,libPath库名,真的,真的);
其他的
myFcn_mex;
结束
结束
在Matlab我这样做:
(1号线)> >目录([getenv (“MY_PROJECT_BASE”)filesep“本”filesep“赢”filesep“x86_64”]);
采用cd(第2行)> >“MY_PROJECT”));
(第3行)> > codegen myFcn
(4号线)> > myFcn
所以:
  1. DLL和LIB文件生活在一个文件夹已成功添加到Matlab路径(1号线)
  2. dll和lib文件所在的文件夹是不一样的,我需要创建我的墨西哥人函数(第2行)
  3. Codegen myFcn_mex命令成功运行和创建文件。mexw64在我工作目录(3号线)
  4. 调用墨西哥人函数(4号线)导致错误:
失踪共享库的依赖:
“myLib.dll”要求通过
函数调用成功如果我在本地复制DLL:
> >! cp % MY_PROJECT_BASE % \ bin \ \ x86_64 \ myLib获胜。dll。\
我很清楚地记得,在过去只是将dll文件所在的目录添加到Matlab路径用于工作。它似乎不再是这种情况。我必须有这个DLL在当前目录或操作系统路径,这将要求我退出Matlab,改变操作系统路径environmant变量,然后重启Matlab。
问题:
  1. 没有管理一个DLL的另一种方式吗?我不想做我上面描述的两个选项。
  2. 不同的是如何用myLib方法。所以文件在Linux或myLib。在Mac dylib吗?
谢谢提前

接受的答案

Prashant Nirmal
Prashant Nirmal 2019年10月23日
编辑:Prashant Nirmal 2019年10月23日
本条所 链接 你必须dll文件系统路径或在同一文件夹中。
对于Linux和Mac。“- l”在“墨西哥人”和“- l”旗帜 文档

答案(1)

尼基塔Visnevski
尼基塔Visnevski 2019年10月23日
编辑:尼基塔Visnevski 2019年10月23日
墨西哥人函数本身实质上是一种一个dll(左右/ dylib,取决于平台),然而我没有墨西哥人上的文件系统路径或当前目录。有一些Matlab做管理墨西哥人比任何通用的dll文件更强劲。我想这是它是什么。我只是希望会有一个更好的方法。
谢谢