config/config.guess 被符号链接到第三方包中的错误文件

Posted

技术标签:

【中文标题】config/config.guess 被符号链接到第三方包中的错误文件【英文标题】:config/config.guess being symlinked to wrong file in third party package 【发布时间】:2016-02-12 12:39:49 【问题描述】:

我正在尝试构建这个使用 automake 的专有第三方项目。我正在使用 Ubuntu 14.04。运行配置时,我收到此错误:

配置:错误:无法运行 /bin/bash ../config/config.sub

失败似乎是由于 config/ 中的文件被符号链接到我没有安装的特定 automake 版本:

lrwxrwxrwx 1 stefan stefan 2012 年 2 月 37 日 12:42 config.guess -> /usr/share/automake-1.11/config.guess lrwxrwxrwx 1 stefan stefan 35 feb 12 12:42 config.sub -> /usr/share/automake-1.11/config.sub

删除 config/ 中的文件并运行“autoreconf -fvi”不会导致重新生成它们,所以我不确定如何正确解决此问题。

我不想安装 automake-1.11 只是为了一些愚蠢的符号链接,所以我用 /usr/share/automake-1.14/ 中的较新版本覆盖了文件,它构建得很好。这应该可以吗,即使人们可能会使用旧版本的 automake(或新版本,就此而言)构建代码?还是有另一种更优雅的方式来解决这个问题?

编辑:第三方库的 autoreconf 输出:

autoreconf: Entering directory `somelib'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force 
autoreconf: configure.ac: tracing
autoreconf: running: libtoolize --copy --force
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `config'.
libtoolize: copying file `config/ltmain.sh'
libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.ac and
libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree.
libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
libtoolize: `AC_PROG_RANLIB' is rendered obsolete by `LT_INIT'
autoreconf: running: /usr/bin/autoconf --force
autoreconf: running: /usr/bin/autoheader --force
autoreconf: configure.ac: not using Automake
autoreconf: Leaving directory `somelib'

Edit2:我确实添加了:

AC_CONFIG_MACRO_DIR(配置)

配置.ac。令人困惑的是没有 Makefile.am - 该软件包似乎只使用 autoconf,而不是 automake,因为只有 Makefile.in。无论如何,通过上述更改,并在删除 config.* 文件后,我注意到它们在运行 autoreconf 后仍未重新生成。现在'autoreconf -fvi'的输出是:

autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force 
autoreconf: configure.ac: tracing
autoreconf: running: libtoolize --copy --force
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `config'.
libtoolize: copying file `config/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `config'.
libtoolize: copying file `config/libtool.m4'
libtoolize: copying file `config/ltoptions.m4'
libtoolize: copying file `config/ltsugar.m4'
libtoolize: copying file `config/ltversion.m4'
libtoolize: copying file `config/lt~obsolete.m4'
libtoolize: Consider adding `-I config' to ACLOCAL_AMFLAGS in Makefile.am.
libtoolize: `AC_PROG_RANLIB' is rendered obsolete by `LT_INIT'
autoreconf: running: /usr/bin/autoconf --force
autoreconf: running: /usr/bin/autoheader --force
autoreconf: configure.ac: not using Automake

【问题讨论】:

如果 autoreconf -fvi 不这样做 - 你应该包括 为什么 它不工作,错误等 - 那么他们的构建工具太旧了,或写不正确。与configure.ac 等相关的错误会很有用。 我已经添加了 autoreconf 的输出。我不完全是自动工具专家,所以无法从上面的输出中找出任何明显的错误——对我来说大部分都是中文:)。 很公平。 'Consider...' 行很能说明问题。您也可以尝试将ACLOCAL_AMFLAGS = -I m4 --install 添加到***Makefile.am(如果还没有的话)。 【参考方案1】:

这感觉就像您尝试构建的软件包的 tarball 不是使用 make dist 构建的,叹息。

正如人们已经指出的那样,解决方案是autoreconf -fi 或类似的。由于您从中得到错误,您应该查看是否有一个 autogen.shbootstrap.sh 脚本应该将正确的 -I 参数集传递给它。

虽然“不使用 Automake”听起来可能比一般项目更奇怪。

【讨论】:

以上是关于config/config.guess 被符号链接到第三方包中的错误文件的主要内容,如果未能解决你的问题,请参考以下文章

将“权限被拒绝”的符号链接...给根

创建符号链接时权限被拒绝

如何防止特定符号被编译器/链接器剥离?

/var/www 中的符号链接权限被拒绝

NSFileManager 中的错误(实例方法是遍历符号链接)

“npm -g yarn”给出“权限被拒绝,符号链接......”但正确的权限确实存在[重复]