“重新链接”警告是什么?

13

在编译 mpich 时,我收到了一些 relinking 警告...

libtool: warning: relinking 'lib/libmpicxx.la'

我在谷歌上搜索错误信息,但没有找到这些含义。什么是 重新链接?它为什么会出现,并且我该如何解决它?


你正在尝试将同一个库链接两次到单个二进制文件中。 - Marc B
那么,它是否会在二进制代码中创建死代码?链接器会处理这个问题吗? - Lord Loh.
1个回答

14
安装时会发出“重新链接”警告,而不是编译时。Libtool会在安装期间运行潜在缓慢的命令,因此发出警告。重新链接可能有不同的原因。
mpich的情况下,原因完全无害。 libmpicxx库依赖于libmpi库。两者都是从同一源代码构建的。Libtool确保如果您在构建目录中运行任何可执行文件,则该文件将使用来自构建目录而不是已安装库的库。
在(至少在Linux上)没有办法确保libmpicxx使用本地构建的libmpi库,除非将库搜索路径(称为RPATH)硬编码到libmpicxx中。
对于已安装的库,要求其永远不要引用它们构建的构建树。因此,需要从已安装的libmpicxx库中消除RPATH。这是通过重新链接它来完成的。
再次强调,警告并不是关于您或软件包做错了什么,而是关于在安装阶段进行潜在缓慢操作的警告(在构建阶段进行慢操作是可以预期的,不需要警告)。

为什么需要完全重新链接,而不是使用类似于chrpath的东西? - Ruslan
@Ruslan,我相信这样做的原因是重新链接更加通用。它可以在链接工作时使用,而chrpath可能在系统上缺失。Libtool和其他GNU autotools一样,旨在生成具有最小依赖关系的非常可移植的软件包。 - proski
2
他们应该写:“警告:潜在的缓慢操作:重新链接....” - Gibezynu Nu

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