使用f2py链接库
我有一个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 这个文件,但找不到。