【问题标题】:Argument list too long. Building Hubbub HTML Parsing Library. execv参数列表太长。构建 Hubbub HTML 解析库。执行
【发布时间】:2011-04-07 02:24:19
【问题描述】:

当我尝试在我的系统 (Fedora) 上构建这个库时

Linux localhost.localdomain 2.6.33.8-149.fc13.i686 #1 SMP Tue Aug 17 22:45:56 UTC 2010 i686 i686 i386 GNU/Linux

我得到一长串错误,这是最后几行:

build/makefiles/Makefile.top:542: warning: overriding commands for target `build-Linux-Linux-release-lib-static/src_charset_detect.o'
build/makefiles/Makefile.top:542: warning: ignoring old commands for target `build-Linux-Linux-release-lib-static/src_charset_detect.o'
 COMPILE: src/hubbub.c
cc: error trying to exec '/usr/libexec/gcc/i686-redhat-linux/4.4.4/cc1': execv: Argument list too long
make: *** [build-Linux-Linux-release-lib-static/src_hubbub.o] Error 1

你可以下载这个错误出现的makefile:

http://www.touspassagers.org/downloadable/Makefile.top

我想我只需要分解 execv 的参数,所以没有那么多。在该文件出现的每个实例中,如何在该文件的上下文中执行此操作?我听说 xargs 是要走的路;但我不知道如何使用它。我对 bash 很陌生。

【问题讨论】:

  • cc1 是编译器本身,是实际进行编译的部分(即预处理后的阶段,但组装前的阶段)。似乎您的工具链为编译器提供了太多的命令行选项(超出了您的操作系统允许的范围),这很奇怪,而且听起来也不对。您可以通过在<limits.h> 中查找ARG_MAX 来检查最大参数数。 POSIX 说必须支持至少 4096 个字符,如果您的操作系统有同样的限制,并且您向 execv 提供的字符超过此限制,它将失败。
  • 实际上,经过仔细检查,ARG_MAX 似乎占了参数环境变量的总字节数。 execv 可能返回 E2BIG 如果 “新进程映像的参数列表和环境列表使用的字节数大于系统强加的 {ARG_MAX} 字节限制。”
  • 哇,谢谢。我将其更改为有效的 URL。
  • @akellehe:是的,也许这是个好主意。除了使用更少的标志或更少的环境变量之外,我不确定他们还能做些什么来修复它。
  • 遗憾的是,这个 Makefile 默认不显示实际的命令行。 @akellehe:如果六个月后这仍然相关,您能否尝试“make Q= VQ=”(是的,等号后面没有任何内容,并确保Q=VQ= 之间有空格)并编辑结果输出到你的问题?这将使它显示它实际尝试做的事情,而不是仅仅说“COMPILE src/hubbub.c”这是无用的。

标签: c bash makefile xargs


【解决方案1】:

在dreamlax发现环境列表也很重要的基础上,您可以在开始构建过程之前检查环境并删除过长的变量,甚至可以尝试env -i build -命令

【讨论】:

    【解决方案2】:

    将 gcc 升级到至少 4.5.0 后重试

    我认为这个错误是那个版本中的fixed

    【讨论】:

    • 这似乎不是一回事 - 那是在谈论响应文件(这里可能没有使用,虽然没有办法告诉)和collect2(这是一个助手程序仅在链接时使用)。
    猜你喜欢
    • 1970-01-01
    • 2019-06-03
    • 2017-11-30
    • 2020-05-09
    • 2014-05-21
    • 2015-04-04
    • 2021-10-26
    • 2014-04-18
    • 2021-10-28
    相关资源
    最近更新 更多