Libtool版本不匹配错误。

77

我在Ubuntu 10.04上使用kdevelop 3.5构建我的应用程序时,出现以下错误:

libtool: Version mismatch error. This is libtool 2.2.6 Debian-2.2.6a-4, but the
libtool: definition of this LT_INIT comes from libtool 2.2.6b.
libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6 Debian-2.2.6a-4
libtool: and run autoconf again.
make[2]: *** [wktools4] Error 63
make[2]: Target `all' not remade because of errors.
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
*** Exited with status: 2 ***

我应该在哪里获取需要的版本的libtool,或者如何重新创建aclocal.m4文件?

11个回答

162

尝试运行

autoreconf --force --install
./configure
make

在项目的根目录下执行。

如果这不起作用,请先运行make maintainer-clean,然后执行步骤1。

如果还是不起作用,请运行make maintainer-clean,然后删除项目根目录中生成的所有文件,包括aclocal.m4、任何m4目录、任何autom4te.cache目录、configureMakefile.inconfig.hconfig.h.inconfig.statuslibtoolltmain.sh等。然后执行步骤1。

为什么这样做有效: libtoolaclocal.m4都是由您的构建系统生成的文件。如果它们不同步(由构建工具的不同版本生成),则会出现此错误。通常情况下不会发生这种情况,但可能会导致此问题的示例是将生成的文件检入源代码控制。

此解决方案的作用是删除并重新生成所有自动生成的文件。一旦它们被清除并重新生成,它们就不会再不同步了。


6
我不想编辑答案,因为我不理解,但我遇到了这个错误,而且 autoreconf 不够用。我必须运行:aclocal; libtoolize --force; autoheader; autoconf - djeikyb
2
autoreconf 的作用就是为您运行所有这些程序,除此之外没有其他功能。不过最好加上 --force 选项,我会编辑答案。 - ptomato
我在Ubuntu 12.04上尝试使用php5,但在执行此命令后情况变得更糟:我无法成功执行./configure - hek2mgl
如果有 autogen.shbootstrap 脚本,请首先运行它们。 - ptomato
4
为什么这有帮助呢?版本不匹配实际上是什么意思? - user1603472
显示剩余2条评论

14

如果您正在使用Anaconda,可能是由于不同来源的libtool和autoconf引起的。 您可以通过执行以下命令来检查:

which libtool

which autoconf

我的libtool来自于conda,而autoconf则是系统软件包。卸载autoconf并使用conda重新安装它:

apt remove -y autoconf (Ubuntu/Debian)

conda install -c anaconda autoconf

注意:您可能还需要安装automake。

conda install -c anaconda automake


12

尝试

autoreconf -i

选项 -i 很重要。


3

可能你安装了两个不同版本的libtool。尝试使用apt-get remove all(直到在命令行中输入which libtool时没有任何输出),然后再使用apt-get install安装你喜欢的版本。


2
直到我运行了 which libtool 并发现它指向我的 anaconda 安装,我才意识到这一点。谢谢! - Yadli

1

尝试运行aclocal


1
谢谢您的回答。请问您能否更具体一些?我有哪些选项可以使用?谢谢! - mspoerr

0

以上方法均无效。

那么这个方法有效:

autoconf -f
./configure
make

0

我也遇到了这个问题。在我的情况下,./autogen.sh 的输出中有以下内容:

libtoolize: 你应该将以下文件的内容添加到 'aclocal.m4' 中: libtoolize: '/aclocal/libtool.m4' libtoolize: '/aclocal/ltoptions.m4' libtoolize: '/aclocal/ltversion.m4' libtoolize: 考虑在 configure.ac 中添加 'AC_CONFIG_MACRO_DIRS([m4])',然后重新运行 libtoolize 和 aclocal。libtoolize: 考虑在 Makefile.am 中的 ACLOCAL_AMFLAGS 添加 '-I m4'。

我只是将 /aclocal/ 下的这三个 *.m4 文件的内容追加到了 aclocal.m4 文件中:

cat <a path>/aclocal/libtool.m4 <a path>/aclocal/ltoptions.m4 <a path>/aclocal/ltversion.m4 >> aclocal.m4 

然后制作。


0

我也使用自定义的包含目录来进行autoconf和autoreconf,例如autoreconf -I ./m4。所以有一次,一个过时的ltversion.m4文件意外地被放置在其中一个自定义包含目录中。这导致了与此处完全相同的错误。我通过删除过时的ltversion.m4文件来解决这个问题。


0

我解决了这个问题,通过卸载系统的libtool并从上游安装:git clone git://git.savannah.gnu.org/libtool.git

sudo apt-get install texinfo autoconf automake make
./bootstrap
./configure
make
sudo make install

0

以上方法均无效。在我停用了conda环境后,它起作用了:

source deactivate


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