找不到自动制作错误“./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
调用它,以便可以将其他支持脚本链接/复制到您的项目(例如compile
、missing
、depcomp
、test-driver
等)。
不用担心运行每个工具。只需invoke autoreconf -i
,它就会运行所需的工具。如果您想查看正在执行的工具,请添加-v
。为避免错误,只需将这样的脚本放在项目的根目录中即可:
#!/bin/bash -x
mkdir -p m4
exec autoreconf --install "$@"
直接从源存储库签出/克隆项目的用户需要至少运行一次此./bootstrap
脚本。如果用户获得了 tarball 分发,则不需要这样做。
Automake 可以很好地照顾自己;当您运行make
时,它会在需要时重新调用上述工具。但是如果你生成了一个损坏的Makefile
,你需要再次调用./bootstrap
和./configure
来生成新的Makefile
s。
【讨论】:
非常有帮助,非常感谢“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”的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot - 制作 jar 文件 - 在 META-INF/spring.factories 中找不到自动配置类