glamor_chinavib 发表于 2009-4-15 16:48

G. Rilling 程序,安装没有complex.h解决方法!!

G. Rilling 07年3月份的程序,运行作者的install_emd.m,出现找不到complex.h的问题,以下是个人的理解和解决过程
个人的运行环境为matlab6.5

complex.h的问题
产生原因:采用matlab的C编译函数mex时,定义了C99_OK的宏(EMDS/make_emdc.m (28行)),利用的是ANSI C99标准如果个人的电脑中没有相关的支持,就会出现这个问题
解决方法:EMDS/make_emdc.m中第28行中mex(’-DC99_OK‘,args(:))语句中的 '-DC99_OK' 即可

*******************注意:
改完之后,运行install_emd,会出现M_PI没有定义的问题,缺少了常数PI的宏定义,导致一些.c文件编译失败

产生原因:去掉C99_OK之后,程序中使用的是作者提供的 emd_complex.h和emd_complex.c两个文件来支持复数运算,这两个文件中,并没有定义M_PI这个宏

解决方法:M_PI这个宏,只在两个文件中(clocal_mean.c和clocal_mean2.c)使用,个人的解决方法是,在相应的头文件(clocal_mean.h和clocal_mean2.h)中加入M_PI的宏定义即可
在两个.h文件中分别加入一下语句:

#define CLOCAL_MEAN_H

#ifndef M_PI
#define M_PI 3.1415926
#endif

安装完成后,编译输出的.dll文件会出现,重复后缀名的问题,及 xxx.dll 变成了 xxx.dll.dll自己去掉多余的.dll即可


最后,关于版本问题
作者推荐使用7.1+版本,但只是针对个别的函数有影响,主要是作者提供的例子程序,无法在matlab6.5环境中运行,算法的主要功能函数并不受影响。

ChaChing 发表于 2009-4-15 17:43

不知道"宏"是什麽意思? 有人可否告知!

glamor_chinavib 发表于 2009-4-15 21:09

回复 沙发 ChaChing 的帖子

C语言中的一种常量定义方式,例如 pi = 3.14,在程序中为了让大家知道这个3.14指的是圆周率,定义一个宏 #define PI 3.14,在以后的程序中 出现PI就相当于常量3.14

nkdtxf 发表于 2009-6-4 21:57

两个文件中(clocal_mean.c和clocal_mean2.c),怎么找不到,呵呵,请楼主明示啊,能详细一下吗,好像还是提示安装有错啊

[ 本帖最后由 nkdtxf 于 2009-6-4 21:59 编辑 ]

yanling66520 发表于 2009-6-25 21:59

回复 楼主 glamor_chinavib 的帖子

解决方法:EMDS/make_emdc.m中第28行中mex(’-DC99_OK‘,args(:))语句中的 '-DC99_OK' 即可
对这句话不是很理解,语句中的'-DC99_OK' 应该如何处理呢,希望楼主现身,解释一下

yzy_banny 发表于 2009-6-30 14:00

用Linux下的Matlab不会出错

如题,可能是系统平台的问题。

麻辣咖喱香蕉 发表于 2012-3-28 10:34

谢谢楼主,这个问题困扰了我很久了,终于解决了,学习了学习了。
楼主那句话的意思应该指改为mex(args(:))

skytian 发表于 2013-4-1 10:02

找了好多程序,可是都不好下载,有人方便发一份吗?

xy062419 发表于 2014-8-18 15:39

感谢楼主!!!

wang07_01 发表于 2014-11-10 19:35

学习中啊

ecityyluo 发表于 2015-5-12 16:23

非常好的解释和产品

战国策 发表于 2016-4-15 16:09

{:{03}:}

xiaozhou1111 发表于 2017-5-12 13:57

大神,谢谢

宇宙无敌大帅逼 发表于 2017-9-10 13:05

xiaozhou1111 发表于 2017-5-12 13:57
大神,谢谢

编译完成的dll在哪里找啊
页: [1]
查看完整版本: G. Rilling 程序,安装没有complex.h解决方法!!