fortran共享库中的参数存储在哪里?

时间:2016-09-02 18:15:47

标签: fortran gfortran nm

我正在尝试构建一个Fortran共享库,以便插入到另一个代码中,并试图了解模块级参数会发生什么以及它们存储在库中的位置。

这样的最小例子:

MODULE test
IMPLICIT NONE

public
integer,parameter :: my_x=1
integer :: my_y

contains

subroutine my_func(a)
    integer, intent(in) :: a

    my_y=my_x*a

end subroutine my_func

END MODULE

从中创建共享库:

gfortran -shared -fPIC testShared.f90 -o libtest.so

然后运行

nm libtest.so

输出:

  

0000000000201018 B __bss_start

     <00> 0000000000201018 b已完成.6938

             w __cxa_finalize@@GLIBC_2.2.5
     

00000000000005e0 t deregister_tm_clones

     

0000000000000670 t __do_global_dtors_aux

     

0000000000200de8 t __do_global_dtors_aux_fini_array_entry

     

0000000000200df8 d __dso_handle

     

0000000000200e00 d _DYNAMIC

     

0000000000201018 D _edata

     

0000000000201020 B _end

     

00000000000006fc ​​T _fini

     

00000000000006b0 t frame_dummy

     

0000000000200de0 t __frame_dummy_init_array_entry

     

0000000000000788 r FRAME_END

     

0000000000201000 d _GLOBAL_OFFSET_TABLE _

             w __gmon_start__
     

0000000000000708 r __GNU_EH_FRAME_HDR

     

0000000000000598 T _init

             w _ITM_deregisterTMCloneTable

             w _ITM_registerTMCloneTable
     

0000000000200df0 d JCR_END

     

0000000000200df0 d JCR_LIST

             w _Jv_RegisterClasses
     

0000000000000620 t register_tm_clones

     

00000000000006e0 T __test_MOD_my_func

     

000000000020101c B __test_MOD_my_y

     

0000000000201018 d TMC_END

我也试过了:

gfortran -shared -fPIC -ggdb -O0 testShared.f90 -o libtest.so

达到同样的效果。

我们可以看到(适合用下划线修改)my_func和my_y但没有my_x。我假设编译器必须仍然将my_x存储在某个地方的库中,以防后来链接的另一个函数想要使用它,即使它是从函数my_func中编译出来的,但是我不知道它可能在哪里。

我的假设错了,my_x消失了,或者是以某种方式存储,我只是没有正确使用nm才能看到它?

0 个答案:

没有答案