Matlab编译器链接错误(64位与32位)

时间:2015-02-12 18:25:24

标签: c matlab static-linking matlab-deployment matlab-compiler

过去几个月,我在Matlab的2010b 64bit版本中一直使用matlab中的deploytool。我刚刚发现我需要创建一个32位版本的c共享库。

要做到这一点,我在我的2009b 32版本的Matlab中遵循我以前使用的相同方法(几乎调用命令mcc -W lib:MYLIB -T link:lib -d 'MYOUTPUTFOLDER' -v 'MFILE1' 'MFILE2')。我一直收到错误LNK1811:无法打开输入文件LIBRARY.obj。我试图找到这个LIBRARY目标文件,但我似乎无法在任何地方找到它。

到目前为止,我已经检查过以确保所有正确的库都可用(在$ MATLABROOT $ \ extern \ include \ win32中找到),我确保我的所有路径在compopts.bat文件中都是正确的,而且我使用选项-T compile:lib工作正常并创建一个DLL。这将是伟大的,但我需要一个lib文件稍后在mbuild中使用。

我目前的前进方向是从我的64位版本的Matlab(在不同的机器上)中获取compopts,并将其与32位的compopts进行比较。如果它有所作为,我会发布。

1 个答案:

答案 0 :(得分:1)

总结我们在问题中的评论并作出答案。以下是我如何使用mcc创建x32和x64库/标准库。

注意:也许还有更优雅的解决方案来配置deploytool,无论如何都是蛮力我确信它可行,我可以自动化我的应用程序的全局部署过程...

机器设置

  1. 在您的计算机上安装Matlab x32和x64
  2. 运行Matlab x32并设置编译器选项,输入msbuild -setup

    • 这将在compopts.bat 中生成~user\AppData\Roaming\MathWorks\MATLAB\R2013b文件(路径可能因您的版本而异)
    • 将此文件重命名为compopts.x32.bat (请参阅后面的内容)
  3. 运行Matlab x64并设置编译器选项,键入msbuild -setup

    • 这将生成compopts.bat 中的~user\AppData\Roaming\MathWorks\MATLAB\R2013b文件(!!覆盖x32 !!)
    • 将此文件重命名为compopts.x64.bat (要解决文件覆盖问题)
  4. 编辑 刚刚测试过...在R2014b中,Matlab不再覆盖相同的compots.bat文件...它现在生成两个单独的MBUILD_C++_win64.xml和{{ 1}}文件(这是一件好事!)。

    在x32中编译

    强制您的编译脚本指向MBUILD_C++_win32.xml并强制~matlabx32\bin\win32\mcc.exe使用mcc.exe选项使用以前保存的compopts.x32.bat文件。您的命令行应该是这样的:

    -f

    在x64中编译

    强制您的编译脚本指向~matlabx32\bin\win32\mcc.exe -f "compopts.x32.bat" ... other mcc options ... 并强制~matlabx64\bin\win64\mcc.exe使用mcc.exe选项使用以前保存的compopts.x64.bat文件。您的命令行应该是这样的:

    -f