dreamforsky 发表于 2005-4-21 20:42:09

函数库想用module模块该怎么定义?试了一下,总出错

新建了一个fortran static library工程,把一些subroutine放在module geometry和end module geometry之间,单独编译后产生了geometry.lib,geometry.mod,geometry.obj。然后放在硬盘一个自建的目录里,在编译器的工具--〉选项--〉目录 给include files和library加上了以上自建的目录,编译后总出现:

P40.OBJ : error LNK2001: unresolved external symbol _GEOMETRY_LIB_mp_GEOMETRY_2L@16
P40.OBJ : error LNK2001: unresolved external symbol _GEOMETRY_LIB_mp_NUM_TO_G@12

我有三个疑虑:
1。到底该往目录里放.lib,.mod,还是.obj文件?还是都要?
2。单独编译module时该选fortran static library,fortran dynamic link library还是别的?
3。我加上自建目录(可否理解为编译器的搜索目录)的方法可否正确?

为什么我把包括module的.f90源代码和测试程序放在一起,并加进工程中又可以成功运行,但是每次都要再次编译module,我的预编译可以解决问题,可老是出错,郁闷啊...

---------------------------很期待大家给我的指点,谢谢-------------------------------------

hillyuan 发表于 2005-4-22 10:40:02

Re:函数库想用module模块该怎么定义?试了一下,总出错

显示的原因是GEOMETRY_2L和NUM_TO_G没有定义,库以被读入。

dreamforsky 发表于 2005-4-23 09:21:12

Re:函数库想用module模块该怎么定义?试了一下,总出错

我事先把GEOMETRY_2L和NUM_TO_G两个子程序已经定义在module geometry和end module geometry之间了编译过了丫?怎么会没定义呢?
我在测试程序中没有定义以上两个子程序,直接 call 的,编译没错,连接错误

我的那三个问题楼上兄弟可否一一解惑,谢谢啦

hillyuan 发表于 2005-4-23 10:38:05

Re:函数库想用module模块该怎么定义?试了一下,总出错

1。到底该往目录里放.lib,.mod,还是.obj文件?还是都要?
=> .obj 不需要.

2。单独编译module时该选fortran static library,fortran dynamic link library还是别的?
=> 两种库只是读入内存时间不同。你的问题应与此无关。不放心的话,先用static library

3。我加上自建目录(可否理解为编译器的搜索目录)的方法可否正确?
=> OK. LINKER似已找到了你的库。

编译过了,怎么会没定义呢?
=> 比如说界面定义不符。另外CVF6.5在调用库函数的时候编译程序好像有Bug(猜测),如用的是它,建议升级。

dreamforsky 发表于 2005-4-25 10:23:17

Re:函数库想用module模块该怎么定义?试了一下,总出错

哇,非常感谢 hillyuan 兄的耐心解答

我去升级一下试试 thx...

dreamforsky 发表于 2005-4-26 15:15:22

Re:函数库想用module模块该怎么定义?试了一下,总出错

我用的就是cvf6.5.0 刚升级到6.5.A
问题还是存在,唉,需要升级到6.6吗?

P40.OBJ : error LNK2001: unresolved external symbol _GEOMETRY_LIB_mp_GEOMETRY_2L@16

上句中的“_GEOMETRY_LIB”代表库已经载入,“_GEOMETRY_2L”代表子程序名称,那“mp”和“@16”代表什么呀?

你说得“界面定义不符”是否是   子程序的参数不配合,精度不匹配(32位和64位)等?

真的很感谢

hillyuan 发表于 2005-4-26 17:49:44

Re:函数库想用module模块该怎么定义?试了一下,总出错

我用的就是cvf6.5.0 刚升级到6.5.A
=> 升级是免费的,为什么不用最新的?!

那“mp”和“@16”代表什么呀?
=> 编译器生成的内部代码以 _MODULENAME_mp_ENTITY@stacksize 命名

你说得“界面定义不符”是否是 子程序的参数不配合,精度不匹配(32位和64位)等?
=> Yes

...... 好像也不能肯定你的库已经载入, 用Project->Add to Project->File直接把你的库文件include到project中吧,这样的话百分之百保险.

dreamforsky 发表于 2005-4-29 09:35:14

Re:函数库想用module模块该怎么定义?试了一下,总出错

按“Project->Add to Project->File”方法可以
大不了每次都编译库文件,呵呵...

超谢谢你啦

hillyuan 发表于 2005-4-29 19:14:11

Re:函数库想用module模块该怎么定义?试了一下,总出错

大不了每次都编译库文件
=>No. I mean include your .lib directly.

2005comein 发表于 2005-6-26 21:46:00

Re:函数库想用module模块该怎么定义?试了一下,总出错

我也有过这样的问题,希望能有高手解答

dreamforsky 发表于 2005-6-27 16:46:02

Re:函数库想用module模块该怎么定义?试了一下,总出错

hillyuan兄的意思我知道了,只加入*.lib好像还不行,我同时把*.lib和*.mod都加入了,不用再次编译顺利通过!非常感谢。

对了,差点忘了,连接时显示警告:LINK : warning LNK4098: defaultlib "libc.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
计算结果没什么错误,总是看起来不顺眼,能调整吗?
页: [1]
查看完整版本: 函数库想用module模块该怎么定义?试了一下,总出错