找不到自动制作错误“./ltmain.sh”

Posted

技术标签:

【中文标题】找不到自动制作错误“./ltmain.sh”【英文标题】:Automake error './ltmain.sh' not found 【发布时间】:2014-05-01 10:35:39 【问题描述】:

我使用mingw-get-setup.exe 安装了mingw 和msys。我还将 Autotools(autoconf, automake,m4,libtool) 安装到 C:\/opt/autotools 中。

当我运行automake时,总是出现以下错误:

configure.ac:11: error: required file './ltmain.sh' not found

如果我从 libtool 的安装树中复制ltmain.sh,执行将正常完成。

如何配置 automake 以在不复制的情况下找到 ltmain.sh

【问题讨论】:

您必须调整路径或指定 ltmain.sh 的完整路径 ltmain.sh 在 c:\opt\autotools\share\libtool\config 中。而PATH=/c/opt/autotools/bin:/C/opt/autotools/share/libtool/config:.:/usr/local/bin 【参考方案1】:

正如 DanielKO 所说,ltmain.sh 是由 libtoolize 创建的。

但是,如果没有呢?

需要满足以下要求:

    configure.ac 必须存在并至少包含以下一项: AM_PROG_LIBTOOL、AC_PROG_LIBTOOL、LT_INIT (参见 /usr/bin/libtoolize 中的函数 func_require_seen_libtool

    如果 configure.ac 不包含 AC_CONFIG_AUX_DIR,libtoolize 将在 ...../.. 中查找名为“install-sh”或“install.sh”的文件,如果找到,请使用该文件作为“auxdir”并在那里安装 ltmain.sh(请参阅 libtoolize 中的函数func_require_aux_dir)。

就我而言,我在另一个项目的子目录中处理“示例项目”,而示例项目的 configure.ac 中没有AC_CONFIG_AUX_DIR;因此 libtoolize 找到了父项目的根目录并将 ltmain.sh 安装在那里而不是示例项目的根目录中。

【讨论】:

【参考方案2】:

autoconf/automake/libtool 项目中你需要运行:

libtoolize:这复制/链接了一些支持脚本,包括ltmain.sh(这是 libtool 的主要组件)。 aclocal:这会查找您的配置脚本需要的所有 m4 宏,并制作一个本地副本以便于访问。 autoheader:可选,如果要使用config.h/AC_CONFIG_HEADERS,否则调用编译器时会内联所有测试结果宏。 autoconf:将configure.ac使用的所有宏扩展成configure脚本。 automake:将所有Makefile.am 转换为Makefile.in 模板。您可能希望使用--add-missing 调用它,以便可以将其他支持脚本链接/复制到您的项目(例如compilemissingdepcomptest-driver 等)。

不用担心运行每个工具。只需invoke autoreconf -i,它就会运行所需的工具。如果您想查看正在执行的工具,请添加-v。为避免错误,只需将这样的脚本放在项目的根目录中即可:

#!/bin/bash -x
mkdir -p m4
exec autoreconf --install "$@"

直接从源存储库签出/克隆项目的用户需要至少运行一次此./bootstrap 脚本。如果用户获得了 tarball 分发,则不需要这样做。

Automake 可以很好地照顾自己;当您运行make 时,它会在需要时重新调用上述工具。但是如果你生成了一个损坏的Makefile,你需要再次调用./bootstrap./configure来生成新的Makefiles。

【讨论】:

非常有帮助,非常感谢“sudo libtoolize && sudo aclocal && sudo autoheader && sudo autoconf && sudo automake --add-missing” @MitermayerReis 如果您需要sudo,那么您没有目录和/或文件的写入权限。文件是否归其他用户所有? @Mitermayer,我认为您应该添加您的评论作为解决方案。谢谢! @ransh sudo 不能随意使用,出于同样的原因,您不应该使用始终以 root 身份登录的 *nix 系统。编译软件不是一项管理任务,它不需要提升权限。 在哪里可以找到有关所需步骤和正确顺序的更多信息? (libtoolize、autconf、automake、autoreconf 等)

以上是关于找不到自动制作错误“./ltmain.sh”的主要内容,如果未能解决你的问题,请参考以下文章

制作:c:找不到命令

SpringBoot - 制作 jar 文件 - 在 META-INF/spring.factories 中找不到自动配置类

Docker:图像无法运行:在 META-INF/spring.factories 中找不到自动配置类

PSR-4 自动加载器致命错误:找不到类

“找不到符号”错误

无法启动 Terminal Services 服务。错误 126: 找不到指定的模块。