使用f2py链接库

4 投票
3 回答
4009 浏览
提问于 2025-04-17 20:28

我有一个Fortran程序,它使用了一些库文件。我正在尝试将这些库文件和正在创建的模块文件链接在一起。

我想链接的库文件叫做 ulib.a,它位于目录 /home/replace/lib/

我使用的命令是:

f2py -L/home/replace/lib/ -lulib.a -c main.f -m progs

但是我遇到了以下错误:

/usr/bin/ld: cannot find -lulib.a
collect2: ld returned 1 exit status
/usr/bin/ld: cannot find -lulib.a
collect2: ld returned 1 exit status

如果有人能帮帮我,我将非常感激!

3 个回答

0

这个库的完整名称应该是 libxxx.a,其中 xxx 是你给的名字。然后你可以这样做:

f2py -L. -lxxx -c main.f90 -m progs

注意,只有 xxx 是跟在 -l 后面的。如果你自己创建这个库,记得要加上 -fPIC。比如,它可能看起来像这样:

gfortran -c -fPIC source1.f90 source2.f90
ar crs libxxx.a obj1.o obj2.o
f2py -L. -lxxx -c main.f90 -m progs

在这个例子中找到了指导: https://modelingguru.nasa.gov/docs/DOC-2343

2

我需要把库的名字中的扩展名去掉,并且还要提供完整的路径。不知道为什么,用-L这个参数提供路径没有成功。

f2py -l/home/replace/lib/ulib -c main.f -m progs
3

试着去掉 .a 后缀。我比较确定链接器已经知道库文件是 .a 格式,所以在你的例子中,它会去找 ulib.a.a 这个文件,但找不到。

撰写回答