gpt4 book ai didi

fortran - 将英特尔风格预处理器转换为与 gfortran 一起使用

转载 作者:行者123 更新时间:2023-12-04 22:50:06 25 4
gpt4 key购买 nike

我正在使用的源代码最初是为英特尔 Fortran 编译器编写的,因此它具有预处理器指令,例如
!DEC$ATTRIBUTES DLLEXPORT::MYDLL !DEC$ATTRIBUTES STDCALL::MYSUBROUTINE !DEC$ATTRIBUTES ALIAS: 'MYENTRYPOINT'::MYSUBROUTINE
如何将其转换为与 gfortran 一起使用。
主要是我希望能够定义和命名入口点。现在,当我使用 gfortran 编译时,每个子例程都会作为入口点公开。此外,入口点名称都是小写字母,末尾带有下划线。

最佳答案

如果将例程放入模块中并将语句 PRIVATE 放在模块的顶部,则 PUBLIC::name1, name2,只有过程 name1 和 name2 在模块外可见。这应该遵循一个库,您可以在其中放置包含模块的目标代码。从 Fortran 90 开始就支持这一点。

正如@janneb 已经回答的那样,您可以使用 bind (C,name=X) 方法来完全控制过程的外部可见名称,覆盖过程的 Fortran 名称。这是 Fortran 2003 的一部分,多年来受到众多编译器的支持。 bind(C) 方法的一个可能问题是,它指定例程的调用约定应该是 C 的调用约定。如果这与 Fortran 不同,并且您希望从 Fortran 调用这些例程,则复杂性会增加。然后,您必须指定一个接口(interface)来通知调用 Fortran 例程它们正在调用看起来像 C 例程的东西。由于人们很少关心链接器可见的名称,除非他们从 C 调用,您可能想要 C 调用约定?

Private function in Fortran 中的示例和 C/C++, FORTRAN, underscores, and GNU Autotools

关于fortran - 将英特尔风格预处理器转换为与 gfortran 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8729164/

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