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

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

在过去的几个月里,我一直在我的 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,无论如何用蛮力我确信它有效并且我可以为我的应用程序自动执行全局部署过程......

机器设置

  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 (解决文件覆盖问题)

编辑 刚刚测试...在 R2014b 中,Matlab 不再覆盖相同的 compots.bat文件 ... 它现在生成两个单独的 MBUILD_C++_win64.xmlMBUILD_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/

相关文章:

dll - 如何在g++中静态包含库?

c++ - 在 Visual Studio 2008 中链接 libav 库

c - 为什么C语言中的指针会出错?

c - LS |用 C 语言编写的 shell 中的 grep

matlab - 1x1 矩阵的第一个元素与 1x1 矩阵的所有元素之间的差异

Matlab:如何对两个等效结构的字段求和?

c - 如何使用C计算文件中存在的行数

c - 数组第一个索引和指向第一个索引的解引用指针的不同值

matlab - 如何打包使用工具箱的 MATLAB 应用程序?

c - 哪个在运行时使用更多 RAM,动态链接还是静态链接?