主题:急求:module中的全局变量在windows中如何编译成dll
小弟最近在尝试将一个FORTRAN打包成DLL。因为要使用一个allocatable的数组做为全局变量,所以希望把module中的全局变量做成dll,然后以其它的进程调用。发现按照CVF6.6中帮助文档提供的方法,怎么也不能将module中的全局变量打包到dll中去。
我用的编译器是CVF6.6,是在命令行环境中编译程序。
为了学习fortran的DLL编译方法,我写了两段小代码,如下:
**** modll.f90 *****
module global
implicit real(kind(1.d0)) (a-h,o-z)
!DEC$ ATTRIBUTES DLLEXPORT :: x, n
allocatable :: x(:)
integer :: n
end module global
--------------------------------------------------
**** test.f90 ****
program test
use global
!
n = 5
allocate(x(n))
do i = 1, n
x(i) = 10.d0*sin(3.14/real(i))
enddo
write(*,"('the array x is: ',/,10(5x,5f10.4,/))") (x(i),i=1,n)
end
---------------------------------------------------
我在命令行的编译命令是:
df /dll /align:all modll.f90
df /align:all test.f90 modll.lib
结果给出的错误是:
objA8E1.tmp : error LNK2001: unresolved external symbol _GLOBAL_mp_X
objA8E1.tmp : error LNK2001: unresolved external symbol _GLOBAL_mp_N
test.exe : fatal error LNK1120: 2 unresolved externals
?????
请教这里的老师们和各位高手,这个问题我该怎么解决?
我用的编译器是CVF6.6,是在命令行环境中编译程序。
为了学习fortran的DLL编译方法,我写了两段小代码,如下:
**** modll.f90 *****
module global
implicit real(kind(1.d0)) (a-h,o-z)
!DEC$ ATTRIBUTES DLLEXPORT :: x, n
allocatable :: x(:)
integer :: n
end module global
--------------------------------------------------
**** test.f90 ****
program test
use global
!
n = 5
allocate(x(n))
do i = 1, n
x(i) = 10.d0*sin(3.14/real(i))
enddo
write(*,"('the array x is: ',/,10(5x,5f10.4,/))") (x(i),i=1,n)
end
---------------------------------------------------
我在命令行的编译命令是:
df /dll /align:all modll.f90
df /align:all test.f90 modll.lib
结果给出的错误是:
objA8E1.tmp : error LNK2001: unresolved external symbol _GLOBAL_mp_X
objA8E1.tmp : error LNK2001: unresolved external symbol _GLOBAL_mp_N
test.exe : fatal error LNK1120: 2 unresolved externals
?????
请教这里的老师们和各位高手,这个问题我该怎么解决?