如何在Intel Fortran中覆写-fvisibility=hidden设置以导出指定例程
Intel Fortran 指定共享对象对外可见实体的方法
Intel Fortran 提供了与C/C++类似的机制,当使用-fvisibility=hidden编译选项全局隐藏所有Fortran例程的对外可见性时,可通过**!DEC$ ATTRIBUTES VISIBILITY编译指令**显式指定哪些模块实体或例程允许外部调用,具体用法如下:
1. 标记独立例程
在独立子程序或函数的定义前添加编译指令,将其设为对外可见:
!DEC$ ATTRIBUTES VISIBILITY :: public_sub subroutine public_sub() ! 例程实现代码 end subroutine public_sub !DEC$ ATTRIBUTES VISIBILITY :: public_func function public_func() result(ret_val) integer :: ret_val ! 函数实现代码 end function public_func
2. 标记模块内的实体
对于模块中的子程序、函数或全局变量,可在模块内直接为目标实体添加可见性标记:
module shared_mod implicit none ! 标记模块变量对外可见 !DEC$ ATTRIBUTES VISIBILITY :: public_var integer :: public_var contains ! 标记模块子程序对外可见 !DEC$ ATTRIBUTES VISIBILITY :: exposed_sub subroutine exposed_sub() ! 子程序实现 end subroutine exposed_sub ! 未添加标记的实体,在-fvisibility=hidden编译时默认对外不可见 subroutine hidden_sub() ! 子程序实现 end subroutine hidden_sub end module shared_mod
3. 编译配合
编译共享对象时,先通过-fvisibility=hidden全局隐藏未显式标记的实体,再结合上述指令暴露需要对外调用的部分:
ifort -shared -fvisibility=hidden -o my_shared_lib.so source_file.f90
内容的提问来源于stack exchange,提问作者Mads M Pedersen
相关产品推荐
相关产品推荐

