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

标签 fortran namespaces shared-libraries intel-fortran

我目前正在尝试在另一个 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/

    相关文章:

    xml - 没有定义前缀的 XML 文档的前缀是什么?

    java - SAX 处理程序的 startElement 回调中的属性中不存在 xmlns 属性

    c++ Visual Studio,使用.lib文件未解析的外部符号

    c++ - 使用访问插件中全局变量的宏

    testing - 带有水果测试的 Cmake

    c - 2014a 上的 Matlab C 网关和 Fortran 源混合 mex 函数

    c# - 扩展方法冲突

    c++ - 即使定义了搜索路径也无法找到自定义共享库

    function - 在fortran中的另一个函数内定义函数时出错

    Python numpy/f2py 链接库