在过去的几个月里,我一直在我的 2010b 64 位版本的 Matlab 中使用 deploytool。我最近才发现我需要创建一个 32 位版本的 c 共享库。
为了做到这一点,我遵循了我之前使用的相同方法(几乎是调用命令 mcc -W lib:MYLIB -T link:lib -d 'MYOUTPUTFOLDER' -v 'MFILE1' 'MFILE2'
) 在我的 2009b 32 版本的 Matlab 中。我不断收到错误 LNK1811:无法打开输入文件 LIBRARY.obj。我试图找到这个 LIBRARY 目标文件,但我似乎无法在任何地方找到它。
到目前为止,我已检查以确保所有正确的库都可用(位于 $MATLABROOT$\extern\include\win32),我已确保我在 compopts.bat 文件中的所有路径都是正确的,并且我已经使用选项 -T compile:lib 可以正常工作并创建一个 dll。这会很棒,但我需要一个 lib 文件以便稍后在 mbuild 中使用。
我目前的前进方向是从我的 64 位版本的 Matlab(在另一台机器上)获取 compopts,并将其与我的 32 位 compopts 进行比较。如果有所不同,我会发布。
最佳答案
总结我们在问题中的评论并使其成为答案。以下是我如何使用 mcc 设法创建 x32 和 x64 库/独立程序。
注意:也许有更优雅的解决方案来配置 deploytool,无论如何用蛮力我确信它有效并且我可以为我的应用程序自动执行全局部署过程......
机器设置
- 在您的机器上安装 Matlab x32 和 x64
运行 Matlab x32 并设置编译器选项键入
msbuild -setup
- 这将生成一个
compopts.bat
文件在~user\AppData\Roaming\MathWorks\MATLAB\R2013b
(路径可能因您的版本而异) - 将此文件重命名为
compopts.x32.bat
(稍后见)
- 这将生成一个
运行 Matlab x64 并设置编译器选项键入
msbuild -setup
- 这将生成一个
compopts.bat
文件在~user\AppData\Roaming\MathWorks\MATLAB\R2013b
(!!覆盖 x32!!) - 将此文件重命名为
compopts.x64.bat
(解决文件覆盖问题)
- 这将生成一个
编辑 刚刚测试...在 R2014b 中,Matlab 不再覆盖相同的 compots.bat
文件 ... 它现在生成两个单独的 MBUILD_C++_win64.xml
和 MBUILD_C++_win32.xml
文件(这是一件好事!)。
x32 编译
强制你的编译脚本指向~matlabx32\bin\win32\mcc.exe
和力mcc.exe
使用之前保存的 compopts.x32.bat
使用 -f
的文件选项。你的命令行应该是这样的:
~matlabx32\bin\win32\mcc.exe -f "compopts.x32.bat" ... other mcc options ...
x64 编译
强制你的编译脚本指向~matlabx64\bin\win64\mcc.exe
和力mcc.exe
使用之前保存的 compopts.x64.bat
使用 -f
的文件选项。你的命令行应该是这样的:
~matlabx64\bin\win64\mcc.exe -f "compopts.x64.bat" ... other mcc options ...
关于c - Matlab 编译器链接错误(64 位与 32 位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28484983/