Matlab 生成 x86 dll 但它需要是 x64

Posted

技术标签:

【中文标题】Matlab 生成 x86 dll 但它需要是 x64【英文标题】:Matlab generates x86 dll but it needs to be x64 【发布时间】:2017-03-29 17:40:55 【问题描述】:

我的 asp.net 应用程序在使用 matlab 函数时遇到了一些问题。

我在 matlab R2016a 上生成了 matlab 函数,然后我通过 matlab 编译器/dotnetbuilder 生成了 Dll。

在本地主机上,我使用 VS2013 构建了一个 MVC Web 应用程序,它接受整数输入,在后端生成随机数计数输入,然后 matlab 函数获取这些随机数的平均值。

但是,它在 localhost 上运行良好,但在安装了 Matlab Compiler Runtime 9.0.1 的服务器上却失败了。例外是: “无法加载 DLL 'mclmcrrt9_0_1.dll':找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)”

所以我用依赖walker查找,我看到了这个;

focused line is belong to the dll that generated via matlab Library compiler of R2016a

它说 matlabs 生成的 dll 是 x86 的 cpu 类型,即使整个应用程序都是 x64 的。

问题: 1)我该如何解决这个问题 2) 为什么这个应用程序在我自己的 PC 上毫无例外地运行

感谢任何答案,如果您需要任何其他信息,请告诉我。

【问题讨论】:

如果应用程序在你的电脑上运行,我猜它使用的 matlab dll 是 64 位的,或者你的应用程序是 32 位的,因为没有其他组合将运行?安装的 matlab 运行时是 32 位还是 64 位(至少在过去必须单独安装)?您的构建命令是否指示 matlab 编译器为 x64 构建? @stijn 首先没有 32 位版本的 matlab 编译器运行时,所以我猜 dll 在编译时应该是 x64 的。我还更改了 x64 cpu 目标平台的 Visual Studio 项目属性。之后我将 VS 更改为 x64 版本,它在我自己的 PC 上运行,但在服务器上,它失败了。 这里有些东西没有意义:64 位应用程序无法加载 32 位 dll,曾经吗?您可能必须提供更多信息才能修复此问题(最少的示例代码、构建命令……)。但首先:据我所知,这不是因为depends.exe 中的CPU 列说x86 dll 是32 位的;从该屏幕截图的外观来看,您正在将 64 位 dll 加载到 32 位depends.exe 中,这会产生有趣的结果。获取 64bit Dependency Walker 并重试。 【参考方案1】:

我做了同样的事情并且遇到了同样的问题,直到我重新启动服务器后问题才解决,因为安装 Matlab RunTime 后在 Windows 系统中定义了新的环境变量。 所以首先重启服务器。 如果使用 64 位服务器,请确保您使用 matlab 64 位编译 dll。

【讨论】:

以上是关于Matlab 生成 x86 dll 但它需要是 x64的主要内容,如果未能解决你的问题,请参考以下文章

怎么用matlab生成20.1到25.9之间的随机数,要求保留到小数点后一位?高手进

如何用python调用matlab生成的dll文件?

matlab中怎样求随机数的和、均方差、均值、平方

pdfium使用

DLL发布 matlab代码发布

如何正确建立和指定的配置和平台,x64和x86