【发布时间】: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 语言的扩展版本”跨度>