链接 2 个具有相同模块名称和子例程名称的库

Linking 2 libraries with same module name and subroutine name

我在一个 Fortran 项目中,我必须 link 2 个具有相同模块名称的库,在这些库下,具有相同的子例程名称。 我正在使用 Intel Fortran 编译器,当我导入模块并调用子例程时,它总是转到第一个 linked.

有没有一种方法可以专门调用特定库中的子例程?

这是一些伪代码:

Lib1 和 Lib 2 都有这个:

module foo
  subroutine func()
    write (*, *) "Hello from Lib1" ! or Lib2
  end subroutine()
end module

主要

program Main
  use foo, only: func

  call func()
end program

CMakeLists.txt


target_link_libraries(Main PRIVATE libLib1.so libLib2.so)

在 Fortran 中有两个相同的模块名称是非法的。在编写其他用户使用的库时,我强烈建议使用 mylibrary_foo 等前缀作为模块名称和其他可能冲突的实体。

现在除了重命名这些东西之外,您无能为力。如果你想尝试在你的工具链中使用技巧以某种方式分离这些东西,你首先必须详细指定你的工具链,但我持怀疑态度。