使用f2py链接库

4

我有一个使用某些库文件的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

I would appreciate any help!


2
一个静态库只是一组目标文件,因此您可以直接包含它,例如 f2py -c main.f /home/replace/ulib.a -m progs 或类似的方式。 - michaelmeyer
3个回答

3
尝试去掉“.a”——我相当确定链接器已经知道库是“.a”格式的,所以在你的例子中它会寻找ulib.a.a并失败。

1
同时,库的名称应该以 lib 开头,如果库名为 libname.a,则只需包含 -fname - Jonatan Öström

2

我必须从库名中删除扩展名并提供完整路径。由于某种原因,使用-L参数提供路径无效。

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

那么 Steve Barnes 的建议没有起作用吗?我一直都是这样做的,而且对我来说很有效。 - amaurea
我必须也使用这种方式(仅限-l而不是-L+-l)。我在Windows上,使用f2py的第二个版本。 - JohnE

0

该库的完整名称应为libxxx.a,其中xxx是给定的名称。然后执行

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

请注意,只有在-l之后才会出现xxx。如果您自己创建库,请记得包含-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

抱歉,我认为这并不是非常有用的。(1)原帖中说库在不同的文件夹中,必须引用。(2)除此之外,这个答案与当前答案有什么不同? - Ross

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接