Fortran Coder

标题: VS2013+Intel Parallel Studio XE 2018 for Fortran与Matlab2016a混合编程问题 [打印本页]

作者: MrLIN    时间: 2018-7-20 10:55
标题: VS2013+Intel Parallel Studio XE 2018 for Fortran与Matlab2016a混合编程问题
本帖最后由 MrLIN 于 2018-7-20 10:55 编辑

请教关于matlab与Fortran混合编程问题,初次接触Fortran语言,有一个混合编程的任务需要完成。用matlab的范例程序 yprimefg 先进行了试验,记过在VS中编译显示如下:

对matlab进行设置时候也同样出现了问题,按照网上的方法也没有解决:

请大家多多指点,不胜感激!!!!

微信图片_20180720104841.png (41.34 KB, 下载次数: 395)

VS

VS

微信图片_20180720105502.png (17.22 KB, 下载次数: 438)

matlab

matlab

作者: 胡文刚    时间: 2018-7-20 13:16
本帖最后由 胡文刚 于 2018-7-20 13:17 编辑

VS要开启预处理。项目菜单,属性,Fortran展开,Preprocessor,Preprocess source file 改为 Yes
给错误提示的话,请直接“输出窗口”复制粘贴,不用截图,尤其是不要对“错误列表”截图


作者: MrLIN    时间: 2018-7-20 18:20
本帖最后由 MrLIN 于 2018-7-20 18:29 编辑
胡文刚 发表于 2018-7-20 13:16
VS要开启预处理。项目菜单,属性,Fortran展开,Preprocessor,Preprocess source file 改为 Yes
给错误提 ...

非常感谢,VS只剩一个错误了:错误        1        fortran_matlab_test : error PRJ0019: A tool returned an error code               
按照网上的普遍说法处理也无济于事:
C:\用户\user.USER-PC\桌面
作者: 胡文刚    时间: 2018-7-20 22:30
输出窗口,全部复制粘贴。
作者: MrLIN    时间: 2018-7-20 22:38
胡文刚 发表于 2018-7-20 22:30
输出窗口,全部复制粘贴。

错误        1        fortran_matlab_test : error PRJ0019: A tool returned an error code               
这就是全部了。。。
作者: 胡文刚    时间: 2018-7-20 22:44
你确定是“输出窗口”,而不是“错误列表”窗口?
如果你不确定,请截图
作者: MrLIN    时间: 2018-7-22 19:45
胡文刚 发表于 2018-7-20 22:44
你确定是“输出窗口”,而不是“错误列表”窗口?
如果你不确定,请截图 ...

噢噢噢,抱歉抱歉,非常感谢耐心解答。输出窗口列表如下:
1>------ 已启动全部重新生成:  项目: fortran_matlab_test, 配置: Debug Win32 ------
1>Deleting intermediate files and output files for project 'fortran_matlab_test', configuration 'Debug|Win32'.
1>Compiling with Intel(R) Visual Fortran Compiler 18.0.3.210 [IA-32]...
1>Source1.for
1>Source1.for(1): #error: can't find include file: fintrf.h
1>fortran_matlab_test : error PRJ0019: A tool returned an error code
1>Build log written to  "file://D:\fortran test\fortran_matlab_test\fortran_matlab_test\Debug\BuildLog.htm"
1>fortran_matlab_test - 1 error(s), 0 warning(s)
========== 全部重新生成:  成功 0 个,失败 1 个,跳过 0 个 ==========
找不到头文件。。。。
作者: fcode    时间: 2018-7-23 16:27
这是找不到 fintrf.h 你需要找到这个文件,然后把它的目录添加到“工程属性”中的 Additional Include

作者: MrLIN    时间: 2018-7-23 20:03
本帖最后由 MrLIN 于 2018-7-23 20:11 编辑
fcode 发表于 2018-7-23 16:27
这是找不到 fintrf.h 你需要找到这个文件,然后把它的目录添加到“工程属性”中的 Additional Include
...

非常感谢您的回答。
我搜索了下,头文件在matlab的安装文件夹里,我按你的描述把路径添加进去,但是编译后有出现了新的错误。。。
错误        1         error LNK2019: 无法解析的外部符号 _MEXERRMSGTXT,该符号在函数 _MEXFUNCTION 中被引用        Source1.obj        
错误        2         error LNK2019: 无法解析的外部符号 _MXGETM730,该符号在函数 _MEXFUNCTION 中被引用        Source1.obj
错误        3         error LNK2019: 无法解析的外部符号 _MXGETN730,该符号在函数 _MEXFUNCTION 中被引用        Source1.obj        
错误        4         error LNK2019: 无法解析的外部符号 _MXCREATEDOUBLEMATRIX730,该符号在函数 _MEXFUNCTION 中被引用        Source1.obj        
错误        5         error LNK2019: 无法解析的外部符号 _MXGETPR,该符号在函数 _MEXFUNCTION 中被引用        Source1.obj        
错误        6         error LNK2019: 无法解析的外部符号 _MXCOPYPTRTOREAL8730,该符号在函数 _MEXFUNCTION 中被引用        Source1.obj        
错误        7         error LNK2019: 无法解析的外部符号 _YPRIME,该符号在函数 _MEXFUNCTION 中被引用        Source1.obj        
错误        8         error LNK2019: 无法解析的外部符号 _MXCOPYREAL8TOPTR730,该符号在函数 _MEXFUNCTION 中被引用        Source1.obj        
错误        9         error LNK2019: 无法解析的外部符号 _MAIN__,该符号在函数 _main 中被引用        libifcoremdd.lib(for_main.obj)        
错误        10         fatal error LNK1120: 9 个无法解析的外部命令        Debug\fortran_matlab_test.exe        


共十个错误

竟然不会添加图片。。。。
D:\fortran test







作者: fcode    时间: 2018-7-24 07:57
matlab\extern\lib\win32\microsoft 下有一个类似 mclcommain.lib 把它加入工程
贴图通过上传附件功能实现。

作者: pasuka    时间: 2018-7-24 08:27
本帖最后由 pasuka 于 2018-7-24 08:32 编辑
MrLIN 发表于 2018-7-23 20:03
非常感谢您的回答。
我搜索了下,头文件在matlab的安装文件夹里,我按你的描述把路径添加进去,但是编译后 ...

路径添加的不正确,通常情况下譬如fintrf.h这类头文件会放在
C:\Program Files\MATLAB\R2016a\extern\include
涉及的动态链接库通常会在
C:\Program Files\MATLAB\R2016a\bin\win64


作者: MrLIN    时间: 2018-7-24 08:47
pasuka 发表于 2018-7-24 08:27
路径添加的不正确,通常情况下譬如fintrf.h这类头文件会放在
C:\Program Files\MATLAB\R2016a\extern\incl ...

我这个电脑上的matlab安装在D盘,头文件的路径是这个:D:\Matlab\extern\include,我这样添加路径您看对不:


微信图片_20180724084635.png (108.62 KB, 下载次数: 217)

微信图片_20180724084635.png

作者: fcode    时间: 2018-7-24 13:38
没错,你现在需要继续添加 lib
作者: MrLIN    时间: 2018-7-24 14:32
fcode 发表于 2018-7-24 13:38
没错,你现在需要继续添加 lib

头文件和动态链接路径都添加进去了,还是没办法编译成功,还是十个错误。。。。


微信图片_20180724143203.png (150.88 KB, 下载次数: 220)

微信图片_20180724143203.png

作者: fcode    时间: 2018-7-24 19:07
按照这样,添加现有项,然后选择 那个 mclcommain.lib 文件即可(不管它的图标是什么样子)

QQ截图20180724190644.jpg (26.8 KB, 下载次数: 225)

QQ截图20180724190644.jpg

作者: MrLIN    时间: 2018-7-24 19:33
已经添加,头文件也加了进去,结果还是不好使。。。。哎,不知道为什么

微信图片_20180724193027.png (80.87 KB, 下载次数: 207)

微信图片_20180724193027.png

作者: MrLIN    时间: 2018-7-24 19:36
fcode 发表于 2018-7-24 19:07
按照这样,添加现有项,然后选择 那个 mclcommain.lib 文件即可(不管它的图标是什么样子) ...

点回复您点错了,您看楼上我的描述,还是在报错
作者: fcode    时间: 2018-7-24 19:59
确认你的 matlab 和 fortran工程所配置的位数一致。比如都是32位或都是64位。

如果有其他 lib 文件,比如 libmex.lib mclmcr.lib mclmcrrt.lib 这些,也添加进去
作者: MrLIN    时间: 2018-7-24 20:10
fcode 发表于 2018-7-24 19:59
确认你的 matlab 和 fortran工程所配置的位数一致。比如都是32位或都是64位。

如果有其他 lib 文件,比如  ...

两个工程的配置应该没问题吧,我这是64位机器,安装时应该都是按照64位按的,fortran的位数该怎样查看呢?我把所有的lib文件都添加进去了,还是没什么变化。还有没有其他解决办法

微信图片_20180724200821.png (89.46 KB, 下载次数: 253)

微信图片_20180724200821.png

作者: fcode    时间: 2018-7-24 20:13
从你之前的回答
噢噢噢,抱歉抱歉,非常感谢耐心解答。输出窗口列表如下:
1>------ 已启动全部重新生成:  项目: fortran_matlab_test, 配置: Debug Win32 ------
1>Deleting intermediate files and output files for project 'fortran_matlab_test', configuration 'Debug|Win32'.
1>Compiling with Intel(R) Visual Fortran Compiler 18.0.3.210 [IA-32]...
1>Source1.for

来看,你的 工程是 32 位的。按以下方法切换为64位


作者: MrLIN    时间: 2018-7-24 20:39
fcode 发表于 2018-7-24 20:13
从你之前的回答

来看,你的 工程是 32 位的。按以下方法切换为64位

厉害了,果然是,少了很多错误,还剩3个

微信图片_20180724203641.png (16.64 KB, 下载次数: 337)

微信图片_20180724203641.png

作者: kyra    时间: 2018-7-24 20:41
本帖最后由 kyra 于 2018-7-24 20:49 编辑

现在是缺少主程序和 yprime 函数了。前者需要你自己补充,后者也应该是用户书写的,不是matlab提供的

b64543a98226cffce96f8338b9014a90f703eaf7.jpg (79.71 KB, 下载次数: 321)

b64543a98226cffce96f8338b9014a90f703eaf7.jpg

作者: MrLIN    时间: 2018-7-24 21:13
kyra 发表于 2018-7-24 20:41
现在是缺少主程序和 yprime 函数了。前者需要你自己补充,后者也应该是用户书写的,不是matlab提供的
...

好像是这样的,这是MATLAB里混合编程的范例,我换了个范例,只提示两个错误:
错误        1         error LNK2019: 无法解析的外部符号 MAIN__,该符号在函数 main 中被引用        libifcoremdd.lib(for_main.obj)       
错误        2         fatal error LNK1120: 1 个无法解析的外部命令        x64\Debug\fortran_matlab_test.exe       
如果自己编写mex到这一步是否可以认为成功了呢?


还有个问题请教,matlab里关于混合编程的语言配置问题, 选择mex -setup FORTRAN,出现以下错误该如何处理?



微信图片_20180724211419.png (16.07 KB, 下载次数: 349)

微信图片_20180724211419.png

作者: kyra    时间: 2018-7-25 08:30
你的图片里用的是 mex -setup 而不是 mex -setup fortran
作者: MrLIN    时间: 2018-7-25 09:05
kyra 发表于 2018-7-25 08:30
你的图片里用的是 mex -setup 而不是 mex -setup fortran

我试了三种方式:

第一种,先输入mex -setup 再点提示中的mex -setup FORTRAN

第二种,直接输入mex -setup fortran

第三种,直接输入mex -setup FORTRAN(区分下大小写,哈哈)

三种操作最终显示的错误都一样的


微信图片_20180725090321.png (27.95 KB, 下载次数: 341)

微信图片_20180725090321.png

作者: kyra    时间: 2018-7-25 09:13
说明 matlab 没有检测到你安装了被它支持的编译器(中的任何一款)

每个 matlab 版本都有自己支持的编译器列表,这些列表中也指定了编译器的版本,不匹配的话没法用。
(这样可能导致你的matlab不能调用fortran代码,但fortran调用matlab应该没问题)

作者: MrLIN    时间: 2018-7-25 10:21
kyra 发表于 2018-7-25 09:13
说明 matlab 没有检测到你安装了被它支持的编译器(中的任何一款)

每个 matlab 版本都有自己支持的编译器 ...

我设置车C++的语言可以正常运行,唯独这个FORTRAN的不可以。。。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2