说,如果选择mexopts.sh作为mex的配置文件,
那么mex如何决定mexopts.sh中列出的哪个选项用于编译?
例如,在64位mac os x上使用32位matlab: mexopts.sh看起来像:
,,maci
........
,,maci64
......
然后,在编译时使用maci或maci64?
为了编译32位lib而不是64位lib,我可以做什么命令或方法?
我的流程和我收到的错误消息的进一步说明: 我使用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文件夹,它是32bit,只有maci文件夹。 所以任何人都知道我应该做什么才能使matlab找到maci文件夹而不是maci64文件夹?非常感谢!
答案 0 :(得分:2)
MEX文件的MATLAB does not support cross compilation。因此,即使操作系统是64位,您的32位MATLAB安装也应该生成32位MEX文件。
另外,从我链接的文章
此外,从R2010b开始,不再为Mac生成32位版本的MATLAB。
如果您正在运行R2010b或更高版本,则无论如何您的MATLAB都不是32位。
要查看MEX脚本调用编译器的switches,请使用-v
选项。
您也可以使用file
tool to check生成的二进制文件是32位还是64位。
答案 1 :(得分:1)
正如已经解释的那样,MATLAB生成的MEX文件与其本身具有相同的位,而不是OS的文件。至少在具有最新MATLAB版本的Windows上也是如此,您可以在64位Windows上运行32位或64位MATLAB。其他平台仅{64}版本为moving。
以下是获取配置的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"'
答案 2 :(得分:0)
回答我自己的问题,仅针对可能对此感兴趣的人,
我检查了mexopts.sh的内容并修改了maci的部分(具体设置为ARCH = i386),然后编译。错误消息消失了。