[英]Compiling 32bit matlab application on 64 bit machine (c++)
我目前正在64位機器上用c ++構建一個32位MatLab引擎應用程序,並安裝了64位MatLab。 但是,對於MatLab引擎,我確實擁有32位的所有dll和庫文件。 庫文件和DLL正確加載(我可以編譯並啟動應用程序,而不會在我使用64位dll的/ libs時遇到任何錯誤),但32位dll顯然啟動了64位matlab可執行文件,所以當我嘗試用引擎做某事時我的程序崩潰了。 有沒有辦法讓我的應用程序啟動32位matlab可執行文件而不是32位?
提前致謝!
這是可能的,但它非常混亂:在我看來,整個mbuild / deploytool系統是一塊cr * p。 deploytool.bat的第一個問題是,雖然有一個'-win32'選項,但是當沒有從32位安裝目錄調用deploytool時,它沒有任何效果。 第二個問題是mbuild選項是32位和64位版本共享的,因此必須手動指定它們,否則使用錯誤的編譯器選項。
以下是我在安裝VS2010的64位Windows機器上編譯32位和64位時所做的一些事情。
<param.c.cpp.options.file>
添加到'configuration`部分下的<param.c.cpp.options.file>
指向正確的編譯器選項(見下文) prj中的選項文件配置:
<deployment-project>
<configuration ....>
....
<param.c.cpp.options.file>${MATLAB_ROOT}\bin\win32\mbuildopts\msvc100compp.bat</param.c.cpp.options.file>
....
請注意,對於32位和64位版本,輸出目錄等將是相同的。 實際上,如果你必須為多個項目執行此操作,這將變得完全無法管理。 所以我有一個msbuild腳本,讓生活更輕松:基本上在prj文件中我用宏替換所有平台依賴(輸出目錄,matlab根目錄,選項文件位置),然后讓msbuild復制prj並進行正則表達式查找/替換具有取決於平台的值的宏。 這允許對兩個平台使用相同的prj。
更新
在對我們的項目進行了一些重大更改后,我們發現最終處理matlab prj文件的麻煩不值得。 相反,我們通過直接調用mcc
並將其與屬於項目的所有文件一起提供來大大簡化了所有內容。 這是相關的msbuild代碼; 為清晰起見,跳過了一些錯誤檢查:
<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>
它需要以下屬性:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.