Fortran Coder

标题: 用DLL封装MODULE的问题 [打印本页]

作者: c84486958    时间: 2021-3-8 23:24
标题: 用DLL封装MODULE的问题
主要想用MODULE定义全局变量,怎么将该MODULE封装成DLL?
遇到报错的做法:
(1)以moddll名称建立dll,并编译,在debug找到并copy编译得到的moddll.mod和moddll.dll
module modDLL
implicit none
real*8 a
end module modDLL


(2)建立project,编译成功
program main
implicit none
real*8 a
a=1.d0
end


(3)将moddll.mod和moddll.dll放入project的debug中,并在main程序中use模块
program main
use moddll           ! 使用模块
implicit none
real*8 a
a=1.d0
end


(4)后编译,出现报错:Error: The attributes of this name conflict with those made accessible by a USE statement.   [A]



(5)去掉real*8 a,再编译,报错1:error LNK2001: unresolved external symbol _MODDLL_mp_A。报错2:fatal error LNK1120: 1 unresolved externals
program main
use moddll
implicit none
a=1.d0
end



报错1和报错2应该都归由报错1,即主要的问题是:unresolved external symbol _MODDLL_mp_A。


针对这个问题,请各位大牛不吝赐教...



作者: fcode    时间: 2021-3-9 08:41
你忘了加入 moddll.lib 导入库哟
作者: c84486958    时间: 2021-3-9 09:01
fcode 发表于 2021-3-9 08:41
你忘了加入 moddll.lib 导入库哟

在这个module代码例子里,编译后没有生成.lib文件,所以没添加, ??
作者: fcode    时间: 2021-3-9 09:20
那应该是你创建错了工程类型,要选DLL类型的工程去创建
作者: c84486958    时间: 2021-3-9 13:52
fcode 发表于 2021-3-9 09:20
那应该是你创建错了工程类型,要选DLL类型的工程去创建

是选的DLL类型工程,好像因为MODULE只是定义了变量,里面没有函数,也没有定义!DEC$,所以没生成.lib。可能这个例子把我要解决的问题扯远了。请问:怎么将MODULE封装成DLL,保留MODULE的功能?
比如这样一个module,在use时变量a和func都是定义过的:
module modDLL
implicit none
real*8 a
contains
subroutine fun1
end subroutine fun1
end module modDLL
作者: fcode    时间: 2021-3-9 15:04
试试加
!DEC$ ATTRIBUTES DLLEXPORT :: a




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