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



我在一个Fortran项目中,我必须链接两个具有相同模块名称的库,在这两个库下,具有相同的子例程名称。我使用的是英特尔Fortran编译器,当我导入模块并调用子例程时,它总是指向链接的第一个。

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

这里有一些伪代码:

Lib1和Lib2都有这个:

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

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

最新更新