gpt4 book ai didi

fortran - 编译不同的文件,其中函数和公共(public) block 具有相同的名称

转载 作者:行者123 更新时间:2023-12-04 16:58:22 27 4
gpt4 key购买 nike

我目前正在尝试在另一个 3rd 方程序(程序 B)中实现一些 3rd 方代码(程序 A)。不幸的是,似乎有些COMMON块和子程序在两个代码之间共享名称。这不会被编译器检测到(我怀疑是因为编译过程涉及许多不同的文件并创建了一个共享对象),但是在访问某些具有非常通用名称的公共(public)块/子例程(例如 BASISJACOBIAN )时程序会崩溃,重命名它们可以缓解这个问题。但是,由于程序 A 的大小,重命名程序 A 中的所有公共(public)块和子程序是不可行的。
目前,我有两个单独的代码目录。我用intel编译器分别编译成.o文件,然后从两者创建一个共享对象:

ifort -c -fPIC -fp-model precise codeA.f
ifort -c -fPIC -fp-model precise codeB.f
ifort -c -fPIC -fp-model precise code_coupling.F90
ld -shared -o library.so codeA.o codeB.o code_coupling.o
code_coupling.F90中的代码用于耦合两个代码,它在 codeB.f 内被调用,我无法改变。
  • 有没有可能编译codeA.f使用一些额外的编译器标志,以便 COMMON 的名称块和子程序不会相互干扰?
  • 有没有其他方法可以防止名称相互干扰?
  • 最佳答案

    我发现的一个(有点hacky)解决方案是编译codeA.f带旗-assume nounderscore ,并重命名code_coupling.F90中需要调用的函数手动使用尾随下划线:

    ifort -c -fPIC -fp-model precise -assume nounderscore codeA.f
    ifort -c -fPIC -fp-model precise codeB.f
    ifort -c -fPIC -fp-model precise code_coupling.F90
    ld -shared -o library.so codeA.o codeB.o code_coupling.o
    重命名子程序 codeA_subroutinecodeA.fcodeA_subroutine_ .

    关于fortran - 编译不同的文件,其中函数和公共(public) block 具有相同的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68484571/

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