【发布时间】:2014-05-21 18:23:59
【问题描述】:
我正在创建一个 Fortran 90 共享库及其 Python 绑定。我需要对其进行调整,以便用户在同时使用 Fortran 和 Python 时可以访问共享库的模块。
Python 部分很简单,我将创建签名文件并使用f2py。然后这些模块将是普遍可访问的。
但是,用户还需要在 Fortran 中访问这些模块。为此,用户将需要.mod 文件。
- 我不愿意分发
.mod文件并与库一起安装,因为它是非正统的。 - 我也不想让用户每次需要访问一个定义模块的文件时都将其复制到他们自己的项目中。
说我正在使用NumPy 的构建系统也很有用,它利用了 Python。特别是numpy.distutils。
所以这是我的解决方案:
- 我将在头文件中定义模块,每个模块一个头文件。
- 在库本身的编译过程中,对于每个头文件
foo.h,在src/modules中都会有一个对应的foo.90包含一行:
这样,库就可以访问模块。
- 对于用户来说,在使用库时,如果用户想要访问模块
foo,用户将包含该行
一次,在他们想要的任何文件中。这样.mod 文件将在用户自己的目录中生成,并且项目将被编译,使用户可以访问模块所在的内存部分。
这看起来合理吗?有没有其他你知道的更好、更少hacky的方法(不涉及.mod文件的分发)?
【问题讨论】:
-
如果您分发 Fortran 代码本身,用户可以通过编译代码来创建自己的 .mod 文件。您不想分发代码?
-
@Fortranner 我会分发它,但根据我的设计,用户不必在项目内重新编译库文件,或引用共享库以外的二进制文件,如
mod文件。