Linux 如何在FORTRAN中检查动态库的可用性和加载动态库
我已经编写了一个FORTRAN库“B”,根据调用方式的不同,它可以调用也可以不调用另一个库“C”中的例程。目的是在应用程序“A”中使用“B” 到目前为止,B和C被编译为静态库(.a文件)。 这意味着C.a在编译B.a时必须可用并链接到,这是可以的。 这也意味着,在编译应用程序a时,C.a必须可用,即使a无意使用依赖于C的B中的功能。这很烦人,似乎没有必要,因为必须将C.a分发给从不使用它的用户 理想情况下,我希望将C作为动态/共享库,并在B中执行如下运行时可用性检查(伪代码):Linux 如何在FORTRAN中检查动态库的可用性和加载动态库,linux,fortran,shared-libraries,Linux,Fortran,Shared Libraries,我已经编写了一个FORTRAN库“B”,根据调用方式的不同,它可以调用也可以不调用另一个库“C”中的例程。目的是在应用程序“A”中使用“B” 到目前为止,B和C被编译为静态库(.a文件)。 这意味着C.a在编译B.a时必须可用并链接到,这是可以的。 这也意味着,在编译应用程序a时,C.a必须可用,即使a无意使用依赖于C的B中的功能。这很烦人,似乎没有必要,因为必须将C.a分发给从不使用它的用户 理想情况下,我希望将C作为动态/共享库,并在B中执行如下运行时可用性检查(伪代码): 在Linux上使
在Linux上使用FORTRAN是否可以执行类似操作?使用
INQUIRE
应该可以检查文件,但加载它是不可能的。因此,我会尝试为库和加载的函数编写一个C包装器。也许有什么特别的Fortran2003可以做到这一点吗?您可以使用ISO_C_BINDING
模块与C进行互操作,但我想,这不是您所要求的。我不知道有任何Fortran(2008)函数可以提供此功能。好的。有时,搜索引擎会完成它们的工作:在中,相应的函数dlopen
和dlsym
直接从Fortran调用。使用ISO_C_BINDING
模块,您可以转换他的示例以满足您的需要。
if (requested feature from C)
if (is_available(libC.so))
call routine_from_C()
(Go on...)
else
call Error("You need to install C")
else
(We don't need C. Go on...)