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的主要内容,如果未能解决你的问题,请参考以下文章