gpt4 book ai didi

fortran - Fortran共享库中的符号命名,intel vs gcc?

转载 作者:行者123 更新时间:2023-12-02 08:04:48 24 4
gpt4 key购买 nike

有没有办法控制共享库中符号的命名?具体来说,我一直在将 GCC 用于我们通过 Python 中的 C-Types 访问共享库的项目。这很好用,但是最近我一直在使用建议使用英特尔编译器的系统。我可以很好地构建共享对象,但我发现这些符号的命名约定与英特尔相比略有不同。特别是当我使用 gcc 编译时,符号名称如下所示:

__test_function_MOD_read_a_file

英特尔编译的共享对象具有如下符号名称:
test_function_mp_read_a_file__

有没有办法强制命名的一致性或至少在事后更改符号的名称?

例如考虑以下代码 test_function.f90
MODULE test_function
CONTAINS
SUBROUTINE read_a_file
PRINT *,'I did a thing!'
END SUBROUTINE
END

编译行应该类似于
gfortran -fPIC -c test_function.f90
gfortran -shared -o libtest_function.so test_function.o

最佳答案

两个编译器都在修改模块中包含的子程序的名称。 Fortran 标准不强制要求任何命名约定。您可以通过使用 Fortran 的 ISO C 绑定(bind)功能为子程序指定特定名称来防止名称混淆。例如,

module bar
contains
function fun(x) bind(c, name='foo')
real fun, x
fun = x
end function fun
function goo(x)
real goo, x
goo = x
end function goo
end module bar

当使用 gfortran 编译时,生成的目标文件包含
gfortran -c a.f90
nm a.o
00000000 T __bar_MOD_goo
00000013 T foo

因此,您可以引用函数 funfoo在图书馆。您可能还想使用 iso_c_binding 定义的类型。模块。

关于fortran - Fortran共享库中的符号命名,intel vs gcc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52741473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com