【问题标题】:What is the nature of the `gcc: error: 0": No such file or directory` error?`gcc: error: 0": No such file or directory` 错误的性质是什么?
【发布时间】:2018-10-05 00:33:57
【问题描述】:

我正在从源代码构建多个库,并在最新版本中签出。我确信我已经安装了这些库的所有依赖项。我使用的工具会在其他系统中正确构建库并正确安装它们所需的依赖项。然而,在我当前的构建机器上,我可以配置和编译一堆库,但是当我尝试从源代码编译 libiconv 和 libsodium 时,gcc 会抛出以下神秘错误:

gcc-7: error: 0": No such file or directory

我不是为这个问题寻找直接的解决方案,我只是想找出这个错误的性质,当它出现在成功配置的项目中时。

编辑:正在运行的最后一个块是: libtool: compile: gcc -m64 -I../lib -I./../lib -I../include -I./../include -I.. -I./.. -I/home/ubuntu/build/monero/contrib/depends/x86_64-linux-gnu/include -pipe -O2 -fvisibility=hidden -DLIBDIR=\"/home/ubuntu/build/monero/contrib/depends/x86_64-linux-gnu/lib\" -DBUILDING_LIBICONV -DBUILDING_DLL -DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"/home/ubuntu/build/monero/contrib/depends/x86_64-linux-gnu/lib\" -DNO_XMALLOC -Dset_relocation_prefix=libiconv_set_relocation_prefix -Drelocate=libiconv_relocate -DPACKAGE_NAME=\"libiconv\" -DPACKAGE_TARNAME=\"libiconv\" -DPACKAGE_VERSION=\"0\" "-DPACKAGE_STRING=\"libiconv 0\"" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DINSTALLPREFIX=\"/home/ubuntu/build/monero/contrib/depends/x86_64-linux-gnu\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -D__EXTENSIONS__=1 -D_ALL_SOURCE=1 -D_DARWIN_C_SOURCE=1 -D_GNU_SOURCE=1 -D_POSIX_PTHREAD_SEMANTICS=1 -D__STDC_WANT_IEC_60559_ATTRIBS_EXT__=1 -D__STDC_WANT_IEC_60559_BFP_EXT__=1 -D__STDC_WANT_IEC_60559_DFP_EXT__=1 -D__STDC_WANT_IEC_60559_FUNCS_EXT__=1 -D__STDC_WANT_IEC_60559_TYPES_EXT__=1 -D__STDC_WANT_LIB_EXT2__=1 -D__STDC_WANT_MATH_SPEC_FUNCS__=1 -D_TANDEM_SOURCE=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_VISIBILITY=1 -DLIBICONV_PLUG -c ./../lib/iconv.c -fPIC -DPIC -o objects/.libs/iconv.o

让我印象深刻的是 "-DPACKAGE_STRING=\"libiconv 0\"" ,它可能导致字符串被作为单独的参数读取。我不明白为什么这会在某些系统上传递而不是在其他系统上传递。

【问题讨论】:

  • 您是在尝试在名称中包含空格字符的目录中构建,还是在父目录的名称中构建?
  • 在某处检查 Windows 样式的行尾。在 Windows 上,\r\n 标志着一行的结束;在 Unix/Linux 上,它只是 \n\r 可以作为文件名的最后一个字符。错误消息打印\r 字符,导致光标移动到行首,并且消息的其余部分被覆盖。尝试gcc ... 2>&1 | cat -A 显示错误消息中实际打印的内容。
  • 您需要提供更多信息。 GCC 正在尝试编译一个名为0" 的文件。冒险猜测,我会说问题出在您的构建脚本和 libsodium 上。使用bash -x 运行您的脚本并发布输出。

标签: linux gcc compiler-errors configure


【解决方案1】:

我只是想知道这个错误的本质是什么

gcc 被要求编译或可能与命令行链接,其中 一个文件被指定,可能是通过一个变量,它的名字是带引号的 字符串形式:

"<something> 0"

这行不通,因为 gcc 会解析两个命令行参数:

"<something>

0"

例如:

$ touch foo.c
$ name="\"foo 0\""
$ gcc -o $name foo.c
gcc: error: 0": No such file or directory

【讨论】:

    【解决方案2】:

    有些项目有时会配置一个包名称字符串,格式如下:PACKAGE_STRING="$packagename $version",中间有一个空格。这个空格最终可能无法正确终止,因此 gcc 会将整个字符串解释为两个单独的命令。然后解决方案是在输入 configure.ac 中修补名称,或者如果它已经是一个预先配置的项目,则将名称字符串修补为一个没有空格或空格格式正确的字符串。

    【讨论】:

      猜你喜欢
      • 2014-04-29
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2016-11-01
      • 2023-04-03
      • 2022-07-11
      • 2023-01-22
      • 2018-04-24
      相关资源
      最近更新 更多