【问题标题】:"/usr/bin/ld: cannot find library"“/usr/bin/ld: 找不到库”
【发布时间】:2012-05-17 04:05:45
【问题描述】:

这是我第一次尝试使用 makefile 编译 FORTRAN 代码。操作系统是 Ubuntu 12.04 LTS 64 位。我遇到了以下错误:

gfortran  -o przm3123.exe canopy.o chem.o cnfuns.o cropdate.o datemod.o debug.o debug_cn.o f2kcli.o floatcmp.o furrow.o general.o i_errchk.o infnan.o inivar.o ioluns.o iosubs.o lambertw.o m_readvars.o utils.o wind.o fcscnc.o przm3.o rsexec.o rsinp1.o rsinp2.o rsinp3.o rsmcar.o rsmisc.o rsprz1.o rsprz2.o rsprz3.o rsprzn.o rsutil.o rsvado.o -L ../libanne4.0/lib -lwdm -ladwdm -lutil
/usr/bin/ld: cannot find -lwdm
/usr/bin/ld: cannot find -ladwdm
collect2: ld returned 1 exit status
make: *** [przm3123.exe] Error 1

makefile 中的关键元素是:

przm2_LIBS = -L ../libanne4.0/lib -lwdm -ladwdm -lutil

有什么办法可以解决这个错误吗?我应该尝试其他编译器吗?

【问题讨论】:

  • 我要检查的第一件事是你是否真的有libwdm.so 和libadwdm.so。我认为它们应该在这个libanne4.0/lib 目录中。
  • 是的,libwdm.a 和 libadwdm.a 在那里。
  • 哦,静态库。你可以在你的makefile中试试这个吗? przm2_LIBS = -L../libanne4.0/lib -Wl,-Bdynamic -lutil -Wl,-Bstatic -lwdm -ladwdm - 我假设 util 是 libutil.so(共享库),因为它没有抱怨这一点。
  • 感谢您的建议。试过你的建议。以下是新的输出:/usr/bin/ld: cannot find -lwdm /usr/bin/ld: cannot find -ladwdm /usr/bin/ld: cannot find -lgcc_s /usr/bin/ld: cannot find -lgcc_s /usr/bin/ld: cannot find -lgcc_s
  • 我认为 alk 可能正在做某事(可能是路径问题)。您能在libanne4.0/lib 中显示库的目录列表吗?此外,将行更改为 przm2_LIBS = -L(path/to/libanne4.0/lib) -Wl,-Bstatic -lwdm -ladwdm -Wl,-Bdynamic -lutil - lgcc_s 的内容是因为我将链接器设置为使用静态链接作为最后一件事,所以这将其更改为使用动态链接。

标签: gcc linker fortran ld gfortran


【解决方案1】:

由于../libanne4.0/lib 是相对路径,您可以尝试将其更改为绝对路径。

您还可以检查链接器进程是否有权访问和读取库。


更新:要让链接器找到使用选项-l<name> 指定的库,库的名称应为lib<name>.[a|so],-L 的参数应指向库所在的路径。

-L 需要在 -l 选项之前。

可以多次指定-l 和/或-L。

【讨论】:

  • 提供了绝对路径,但同样的错误。我试过ld adwdmlib.a 并得到以下错误:ld: warning: cannot find entry symbol _start; not setting start address 谢谢
  • adwdmlib.a 是我需要包含的库。基于你提到的 L 和 l 规则。这是否意味着 przm2_LIBS = -L ../libanne4.0/lib -lwdm -ladwdm -lutil 不起作用,因为这些库的名称不正确?
【解决方案2】:

名称“adwdmlib.a”有问题。链接标志“-l adwdm”将告诉编译器期待一个名为“libadwdm.a”的lib文件,而不是“adwdmlib.a”。这有帮助或相关吗?如果您的库名称是“adwdmlib.a”,这可能就是您的链接器找不到它的原因。

【讨论】:

  • 感谢您的评论。我试图重命名这些库,但链接器仍然找不到它们。
猜你喜欢
  • 2021-05-07
  • 2011-07-16
  • 2013-09-09
  • 2020-04-14
  • 2012-03-26
  • 2018-12-13
  • 2015-09-22
  • 2020-01-19
  • 2012-01-14
相关资源
最近更新 更多