Matlab mex 无法构建,但 gcc 可以
Posted
技术标签:
【中文标题】Matlab mex 无法构建,但 gcc 可以【英文标题】:Matlab mex can not build but gcc can 【发布时间】:2015-10-15 01:20:26 【问题描述】:我是 Matlab 的新手,正在尝试构建一个 C 文件。使用 gcc(64 位 Ubuntu 中的 4.8.4)可以很好地编译代码。但是当我尝试使用mex
构建时,它显示以下错误:
error: exponent has no digits
我不确定我做错了什么。错误是in this file。完成error log is here。
当我使用 gcc 编译代码时,没有错误。我没有为 gcc 提供任何特殊参数。据我所知,mex
正在使用 gcc
,所以我不明白为什么 mex
无法构建代码。
我对 C 编程知之甚少,非常感谢任何帮助!
编辑:
为了进一步澄清,我在两个文件中找到了源代码:
文件 1 具有带有 main
函数的 C 代码,并使用来自 this
file 的函数(mex
无法构建)。
文件 2 有 S-Function
的 C 代码,它调用文件 1 的 main
函数。文件 2 有一个 include
语句以包含 File 1
。
当我说我可以使用gcc
构建时,我只是使用以下命令构建了File 1
:gcc file1.c -o file1
。我认为不使用gcc
构建File 2
对我的问题没有影响,因为只有文件1 使用了mex
无法构建的文件中的那些函数。
我使用来自 Matlab mex file2.c
的这个命令来构建并得到错误。
【问题讨论】:
看起来 mex 不支持十六进制浮点数,https://gcc.gnu.org/onlinedocs/gcc/Hex-Floats.html
,这是问题所在的第 982 行。我猜你必须传递给mex
选项告诉在构建代码时使用 GNU 扩展
gcc 扩展是使用-std=gnu++11
而不是-std=c++11
启用的(对于标准的其他修订版进行了必要的修改)
@BenVoigt 我相信这是纯 C,因此很可能应该使用 -std=gnu99 启用扩展。
@giga 很可能您必须将 -std=gnu99(或者可能是 gnu90)选项传递给编译器(mex 只是一个包装器)。不幸的是,我现在不知道该怎么做,我对matlab的经验是很久以前的了
直接引用“您也可以使用 -std=gnu90(对于带有 GNU 扩展的 C90)、-std=gnu99(对于带有 GNU 扩展的 C99)显式选择 C 语言的扩展版本”跨度>
【参考方案1】:
对于 C 代码,您可能需要为 C99 (-std=gnu99
) 启用 GNU 扩展。如my previous post 中关于启用 C99 所述,将其传递给mex
:
mex -v -largeArrayDims CFLAGS="\$CFLAGS -std=gnu99" mexSouce.c
默认不起作用的原因是mex
喜欢选择ANSI standard,这通常不是最新的。
【讨论】:
以上是关于Matlab mex 无法构建,但 gcc 可以的主要内容,如果未能解决你的问题,请参考以下文章
Octave:可以编译 mex,但出现错误:“无法安装 .mex 文件功能”