【问题标题】:which configuration option is used by Mex to compile using matlab?Mex 使用哪个配置选项使用 matlab 进行编译?
【发布时间】:2013-05-07 20:31:20
【问题描述】:

比如说,如果选择 mexopts.sh 作为 mex 的配置文件,

那么 mex 如何决定 mexopts.sh 中列出的哪个选项用于编译?

例如,在 64 位 mac os x 上使用 32 位 matlab: mexopts.sh 看起来像:

 ,,maci
 ........

 ,,maci64
 ......

那么,编译时使用的是maci还是maci64?

为了编译 32 位库而不是 64 位库,我可以执行哪些命令或方法?

进一步解释我的过程和我收到的错误消息: 我正在使用 mac os x 10.8(64 位)和 matlab R2010a(32 位)来生成二进制 mex 文件。 Xcode 是 4.6 版本,我在我的机器上安装了命令行工具。然后我还是从matlab下载了2011和2012版本的补丁。 (如果我不安装补丁,我会收到很多链接错误,说缺少一些头文件)。 安装补丁后(我相信它会更改我的 mexopts.sh 文件),当我运行 mex a.cpp 时,我收到错误消息,提示找不到 /Applications/MATLAB_R2010a.app/bin/maci64。当然找不到maci64文件夹,是32位的,只有maci文件夹。 所以任何人都知道我应该怎么做才能让 matlab 寻找 maci 文件夹而不是 maci64 文件夹?非常感谢!

【问题讨论】:

    标签: matlab mex


    【解决方案1】:

    MEX 文件的 MATLAB does not support cross compilation。因此,即使操作系统是 64 位,您的 32 位 MATLAB 安装也应该生成 32 位 MEX 文件。

    另外,来自我链接的文章

    此外,从 R2010b 开始,不再为 Mac 生产 32 位版本的 MATLAB。

    如果您运行的是 R2010b 或更高版本,那么您的 MATLAB 无论如何都不是 32 位的。

    要查看 MEX 脚本使用什么 switches 调用编译器,请使用 -v 选项。

    无论生成的二进制文件是 32 位还是 64 位,您也可以使用 file tool to check

    【讨论】:

    • MATLAB 不支持 MEX 文件的交叉编译。因此,即使操作系统是 64 位,您的 32 位 MATLAB 安装也应该生成 32 位 MEX 文件。 ---- 所以这意味着,如果我给 mex a.cpp ,它无论如何都会生成 32bit 版本?但是当我给出类似 mex a.cpp 的东西时,我收到一条错误消息,说找不到 /Applications/MATLAB_R2012a.app/bin/maci64。显然,对于 32bit matlab (R2010a),没有 maci64 文件夹,只有 maci 文件夹。为什么我会收到此错误消息?我应该做类似的事情:mex -arch maci a.cpp?我做错了什么?谢谢。
    • @user1558064 不幸的是,我从未在 Mac 上使用过 MATLAB,因此当涉及到诸如该错误之类的特定问题时,我不会提供太多帮助。你可以试试-arch 选项;还添加-v 开关并查看传递给编译器的标志。这应该可以帮助您确定输出二进制文件是 32 位还是 64 位。
    【解决方案2】:

    如前所述,MATLAB 生成的 MEX 文件与其自身的位数相同,而不是操作系统的 MEX 文件。至少在具有最新 MATLAB 版本的 Windows 上是这样,您可以在 64 位 Windows 上运行 32 位或 64 位 MATLAB。其他平台是 moving 仅面向 64 位版本。

    这是获取配置的mex 开关的另一种方法:

    >> cc = mex.getCompilerConfigurations
    >> cc.Details
    

    就我而言,我得到:

    >> cc = mex.getCompilerConfigurations
    cc = 
      CompilerConfiguration with properties:
    
                 Name: 'Microsoft Visual C++ 2010'
         Manufacturer: 'Microsoft'
             Language: 'C++'
              Version: '10.0'
             Location: 'C:\Program Files\Microsoft Visual Studio 10.0'
              Details: [1x1 mex.CompilerConfigurationDetails]
           LinkerName: 'Microsoft Visual C++ 2010'
        LinkerVersion: '10.0'
    >> cc.Details
    ans = 
      CompilerConfigurationDetails with properties:
    
             CompilerExecutable: 'cl'
                  CompilerFlags: [1x115 char]
              OptimizationFlags: '/O2 /Oy- /DNDEBUG'
                     DebugFlags: '/Z7'
               LinkerExecutable: 'link'
                    LinkerFlags: [1x327 char]
        LinkerOptimizationFlags: ''
               LinkerDebugFlags: '/debug /PDB:"%OUTDIR%%MEX_NAME%%MEX_EXT%.pdb"'
    

    【讨论】:

      【解决方案3】:

      回答我自己的问题,只为那些可能感兴趣的人,

      我检查了 mexopts.sh 的内容并修改了 maci 的部分(特别设置 ARCH=i386),然后编译。错误信息消失了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-29
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 2014-03-25
        • 1970-01-01
        相关资源
        最近更新 更多