【发布时间】:2014-06-13 02:15:36
【问题描述】:
我已经将几个子例程放入 .f95 文件中,用gfortran -shared -fPIC -o bin/Debug/libpr10.so main.f95 编译它,现在我想在我的 C 程序中使用该库中的一些子例程。我该怎么做(语法上)?我是否必须在 Fortran 库中生成任何“标题”,我应该在其中声明我想在库外部使用的子例程(如果它是 C,我必须这样做)?
如果我只是告诉链接器库在哪里并尝试调用 main() 中的任何子例程,我会收到错误
更新我不想混合使用 fortran 和 C!我只想使用 Fortran 共享库中的一个子程序,即使没有参数。尽管我已经指出了 .so 库的路径,但它对于 C 程序是“不可见的”!问题是如何告诉 C 程序实际上有一个我要调用的子例程。
如果我严重误认为“混合”的想法,请纠正我。
【问题讨论】:
-
你得到什么错误?只需告诉链接器库在哪里。您不能有两个主要程序...想知道因为您将 Fortran 文件称为“main.f95”。要混合 Fortran 和 C,我建议首先使用选项“-c”编译 C 以获取目标文件,然后编译 Fortran 并使用 gfortran 链接所有内容,包括目标文件。一旦你有这个工作,你可以尝试并发症。
-
如果您从 C 中调用 Fortran 子例程,您就是在混合这些语言。您必须通知链接器有关该库的信息。为了引入 Fortran 运行时库,通常最容易与 Fortran 编译器链接。我建议首先让它在没有共享库的情况下工作,只是对象文件,然后添加该步骤。另外,看看标签stackoverflow.com/tags/fortran-iso-c-binding/info
标签: c fortran shared-libraries