在64位机器(c+;+;)上编译32位matlab应用程序 我现在正在C++上构建一个32位的Matlab引擎应用程序,在64位机上安装了64位MATLAB。然而,我有所有的dll和库文件在32位的MatLab引擎。库文件和dll加载正确(我可以编译和启动应用程序,而不会出现使用64位dll/libs时出现的任何错误),但32位dll显然启动了64位matlab可执行文件,因此我的程序在尝试对引擎执行操作时立即崩溃。有没有办法让我的应用程序启动32位matlab可执行文件而不是32位的
提前谢谢 这是可能的,但非常混乱:在我看来,整个mbuild/deploytool系统就是一个cr*p。deploytool.bat的第一个问题是,尽管有一个“-win32”选项,但在未从32位安装目录调用deploytool时,该选项没有任何效果。第二个问题是32位和64位版本共享mbuild选项,因此必须手动指定它们,否则会使用错误的编译器选项 下面是我在安装了VS2010的64位windows机器上编译32位和64位时做的一些事情在64位机器(c+;+;)上编译32位matlab应用程序 我现在正在C++上构建一个32位的Matlab引擎应用程序,在64位机上安装了64位MATLAB。然而,我有所有的dll和库文件在32位的MatLab引擎。库文件和dll加载正确(我可以编译和启动应用程序,而不会出现使用64位dll/libs时出现的任何错误),但32位dll显然启动了64位matlab可执行文件,因此我的程序在尝试对引擎执行操作时立即崩溃。有没有办法让我的应用程序启动32位matlab可执行文件而不是32位的,c++,matlab,32bit-64bit,C++,Matlab,32bit 64bit,提前谢谢 这是可能的,但非常混乱:在我看来,整个mbuild/deploytool系统就是一个cr*p。deploytool.bat的第一个问题是,尽管有一个“-win32”选项,但在未从32位安装目录调用deploytool时,该选项没有任何效果。第二个问题是32位和64位版本共享mbuild选项,因此必须手动指定它们,否则会使用错误的编译器选项 下面是我在安装了VS2010的64位windows机器上编译32位和64位时做的一些事情 您必须同时安装32位和64位matlab版本 您必须从命
- 您必须同时安装32位和64位matlab版本
- 您必须从命令行执行所有操作
- 您永远不能通过deploytool ui编辑.prj文件,因为它会使所有手动更改都出错。(好吧,这实际上是一个好处,因为现在至少你可以将它们存储在VCS中)
- 通过在“配置”部分下的prj中添加
,指向正确的编译器选项(见下文) - 通过手动提供32位安装的deploytool.bat的完整路径进行构建
<deployment-project>
<configuration ....>
....
<param.c.cpp.options.file>${MATLAB_ROOT}\bin\win32\mbuildopts\msvc100compp.bat</param.c.cpp.options.file>
....
它需要这些属性:
- MlPlatform:x86构建32位,x64构建64位
- MlMatlabx86Dir:指向matlab 32位安装目录的路径
- MlMatlabx64Dir:指向matlab 64位安装目录的路径
- MlMatlabProjDir:指向“project”目录的路径,其中包含要编译的m文件
- MlMatlabSrcDir:具有额外源m文件的路径
- MlOutDir:输出目录
- MlOutputName:输出名称
<Target Name="BuildMatlabProject">
<PropertyGroup Condition="$(MlPlatform)=='x86'">
<MlMatlabBinDir>$(MlMatlabx86Dir)\bin\win32</MlMatlabBinDir>
</PropertyGroup>
<PropertyGroup Condition="$(MlPlatform)=='x64'">
<MlMatlabBinDir>$(MlMatlabx64Dir)\bin\win64</MlMatlabBinDir>
</PropertyGroup>
<ItemGroup>
<MlMFiles Include="$(MlMatlabProjDir)\*.m"/>
<MlMResources Include="$([System.IO.Directory]::GetDirectories("$(MlMatlabSrcDir)"))"/>
</ItemGroup>
<PropertyGroup>
<MlMresourcseString Condition="@(MlMResources)!=''"> -a @(MlMResources, ' -a ')</MlMresourcseString>
</PropertyGroup>
<RemoveDir Directories="$(MlOutDir)" ContinueOnError="true"/>
<MakeDir Directories="$(MlOutDir)"/>
<Exec Command="$(MlMatlabBinDir)\mcc -W cpplib:$(MlOutputName)_$(MlPlatform)
-T link:lib -d $(MlOutDir) -f $(MlMatlabBinDir)\mbuildopts\msvc100compp.bat
-w enable:specified_file_mismatch -w enable:repeated_file -w enable:switch_ignored
-w enable:missing_lib_sentinel -w enable:demo_license -v
@(MlMFiles, ' ') $(MlMresourcseString)"/>
</Target>