Fortran Coder

查看: 15001|回复: 11

[编译器] module中的变量如何导出

[复制链接]

5

帖子

1

主题

0

精华

入门

F 币
57 元
贡献
25 点
发表于 2016-9-21 17:03:24 | 显示全部楼层 |阅读模式
最近想写一些电磁计算的程序,采用面向对象的设计思路来写,但是发现FORTRAN中DLL似乎只能支持方法和参量的交互,无法进行类的导出,于是处于纠结状态中。
我遇到的问题大概如下
在工程DLL1中一个module文件如下:
[Fortran] 纯文本查看 复制代码
!module.f90
module test

real::z=7
type MM
   integer::C=5
endtype MM

end module test

编译后生成test.mod文件,正确
然后在主工程文件下的main函数中有如下调用:
[Fortran] 纯文本查看 复制代码
progarm main
use test
type(MM)::SS

SS%C=7
z=6.0
end program

因为在工程依赖项中加载了编译过的test.mod文件,DLL和lib都加载过,因此
SS%C=7  这句是正确的
但是,下一句z=6.0就报错:
错误 1  error LNK2019: 无法解析的外部符号 _TEST_mp_Z,该符号在函数 _MAIN__ 中被引用 Main.obj
错误 2  fatal error LNK1120: 1 个无法解析的外部命令 Debug\TestDLL.exe
所以求助大神们,怎么破,就是如何引入别的文件写好的module中的数据,但是本身源代码.f90不在当前工程文件下。

795

帖子

2

主题

0

精华

大宗师

F 币
3783 元
贡献
2264 点
发表于 2016-9-22 10:17:40 | 显示全部楼层

1955

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1327 元
贡献
559 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2016-9-22 14:14:44 | 显示全部楼层
楼主可以看《Intel Visual Fortran 应用程序开发》(周振红),第 9.2.3 章节 :共享DLL中的数据

5

帖子

1

主题

0

精华

入门

F 币
57 元
贡献
25 点
 楼主| 发表于 2016-9-22 14:43:33 | 显示全部楼层
li913 发表于 2016-9-22 10:17
你可以看看视频,http://v.fcode.cn/video-library_dll.html

非常感谢,我以前只看过基础篇,还没看过应用篇。

5

帖子

1

主题

0

精华

入门

F 币
57 元
贡献
25 点
 楼主| 发表于 2016-9-22 16:18:24 | 显示全部楼层
本帖最后由 x408859786 于 2016-9-22 17:00 编辑
fcode 发表于 2016-9-22 14:14
楼主可以看《Intel Visual Fortran 应用程序开发》(周振红),第 9.2.3 章节 :共享DLL中的数据 ...

问题已经解决,非常感谢,一直想要找这样的书,学校图书馆里有关Fortran的书很少也很旧。我还想问一下,能否推荐些外文的有关IVF资料的书籍呢?

1955

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1327 元
贡献
559 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2016-9-23 11:05:28 | 显示全部楼层
很少有专门介绍编译器的书籍。
如果你要看外文的fortran书,本站资源站就有一些:
http://resource.fcode.cn

个人完整看过的只有 《Modern Fortran Explained》 部分看过的 《Object Oriented Programming via Fortran 90/95》《Fortran 90 95 Array and Pointer Techniques》

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

发表于 2016-9-23 16:15:22 | 显示全部楼层
本帖最后由 pasuka 于 2016-9-23 16:18 编辑
x408859786 发表于 2016-9-22 16:18
问题已经解决,非常感谢,一直想要找这样的书,学校图书馆里有关Fortran的书很少也很旧。我还想问一下,能 ...

周振红那本书可以变相理解成IVF早期版本的部分帮助文档和算例中文翻译
倘若lz能把最新版IVF帮助文档以及相关例子完全啃透的话,晋级中国大陆地区Fortran编程能力的前10%毫无压力

1955

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1327 元
贡献
559 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2016-9-24 09:49:33 | 显示全部楼层
是的。我也发现了,所以我并不十分看好周振红的书。通常也不推荐给别人。

5

帖子

1

主题

0

精华

入门

F 币
57 元
贡献
25 点
 楼主| 发表于 2016-9-25 23:59:41 | 显示全部楼层
fcode 发表于 2016-9-24 09:49
是的。我也发现了,所以我并不十分看好周振红的书。通常也不推荐给别人。 ...

原来是这样子,其实我也发现了,那本书讲的有关DLL的内容,确实比较粗略,我用Fortran大致两年不到,以前都是用matlab编写一些扩展性不好的小程序。后来发现matlab做循环的速度实在太慢,恰好我的算法需要大量密集运算,所以最后走上Fortran的道路,但是慢慢就发现Fortran的面向对象功能不是很完善,module封装的type与C++的class区别很大,而且目前版本也没有submodule和template等命令,所以就走上了混编的道路

5

帖子

1

主题

0

精华

入门

F 币
57 元
贡献
25 点
 楼主| 发表于 2016-9-26 00:04:18 | 显示全部楼层
pasuka 发表于 2016-9-23 16:15
周振红那本书可以变相理解成IVF早期版本的部分帮助文档和算例中文翻译
倘若lz能把最新版IVF帮助文档以及相 ...

真心不敢想吃透,感觉能用好已经很不错了。与C++不同,Fortran的那个自动save属性,郁闷了好几天,才突然发现,赋初值原来只有第一次有用。以前很多程序,都是按照C++的思路和习惯去写的,而且还有Visual Assist的帮助,突然一下没了,适应了好久。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-16 16:08

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表