使用Intel fortran编译器编译包含内在函数的mex fortran代码

4次浏览(最近30天)
你好,
我试图使用英特尔并行工作室XE 2019与微软visual studio 2015编译器mex fortran代码。我的fortran代码调用内在函数cosd, sind和atand。然而,链接器一直抱怨这些是未解决的外部符号。是否有库,我需要在mex期间链接,将定义这些内在函数?谢谢。
使用mex出错
创建库rcssig。库和对象rcsigg .exp
read_reftab。obj:错误LNK2019:未解析的外部符号COSD引用
函数READ_REFTAB
body_to_range。obj:错误LNK2001:无法解析的外部符号COSD

接受的答案

一个国王
一个国王 2019年9月25日
编辑:一个国王 2019年9月25日
cosd, sind, atand不是Fortran标准的一部分,它们是Fortran语言的GNU扩展,不能被Intel理解。这些GNU函数以角度为单位,而不是弧度(这是Fortran中sin、cos、atan的标准)。如果您想通过Intel编译这些文件,将cosd, sind的所有实例的参数乘以pi/180 = 0.01745329251,它将角度转换为弧度,然后将cosd, sind的所有实例分别替换为cos, sin,这是Fortran标准的一部分,应该可以解决错误。
至于atand,这个函数返回角度,所以你必须用57.2957795131 * atan()替换atand()
57.2957795131 = 180/pi
2的评论
Duy阮
Duy阮 2019年9月25日
编辑:Duy阮 2019年9月25日
完美!非常感谢。
希望我能早点从Fortran网站上读到这一点,这将节省我大量的时间,试图弄清楚为什么cosd在独立模式下编译,而不是在mex:)谢谢你!!!!!

登录评论。

更多答案(1)

詹姆斯Tursa
詹姆斯Tursa 2019年9月24日
编辑:詹姆斯Tursa 2019年9月24日
你能发布违规代码吗?也许你用一个非实参调用它,编译器抱怨它不能为你的特定实参类型找到一个特定的函数。
你是如何进行编译和链接的?使用mex命令,还是从Visual Studio环境中构建?
1评论
Duy阮
Duy阮 2019年9月24日
你好,
这是我做的一个示例调用:pitch(1,1)=COSD(pitch_angle),其中pitch_angle是一个实数。
代码在Visual Studio 2015和2017环境中编译和运行良好。但是当我尝试在Matlab中对它进行mex时,我得到了未定义的外部错误。我查看了Visual Studio 2015编译器生成的构建日志文件,没有看到我需要链接的库,所以我不知道Mex在寻找什么来解析cosd。
谢谢。

登录评论。

类别

了解更多Fortran与MATLAB帮助中心而且文件交换

s manbetx 845

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!