【问题标题】:Makefile crashed while making after pass the ./configure --host=mingw32通过 ./configure --host=mingw32 后 Makefile 在制作时崩溃
【发布时间】:2021-02-17 02:55:16
【问题描述】:

大家:情况:带有x86_64-w64-mingw32编译工具链的MacOS 我尝试从GDB的源代码编译GDB for Windows。但是,在 ./configure 之后,我得到了

/bin/sh ./libtool  --tag=CC   --mode=link x86_64-w64-mingw32-gcc -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wstack-usage=262144 -Wno-format -I./../zlib -Iincludedir -D__USE_MINGW_ACCESS  -release `cat libtool-soversion`  -Llibdir -Wl,--stack,12582912 -o libbfd.la -rpath /usr/local/lib archive.lo archures.lo bfd.lo bfdio.lo bfdwin.lo cache.lo coff-bfd.lo compress.lo corefile.lo elf-properties.lo format.lo hash.lo init.lo libbfd.lo linker.lo merge.lo opncls.lo reloc.lo section.lo simple.lo stab-syms.lo stabs.lo syms.lo targets.lo binary.lo ihex.lo srec.lo tekhex.lo verilog.lo `cat ofiles`   -L./../zlib -lz 
./libtool: line 5208: cd: libdir: No such file or directory
libtool: link: cannot determine absolute directory name of `libdir'
make[4]: *** [libbfd.la] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-bfd] Error 2

我确信我的 MingW32 功能齐全。

x86_64-w64-mingw32-addr2line   x86_64-w64-mingw32-dllwrap     x86_64-w64-mingw32-gcc-ranlib  x86_64-w64-mingw32-ld.bfd      x86_64-w64-mingw32-size
x86_64-w64-mingw32-ar          x86_64-w64-mingw32-elfedit     x86_64-w64-mingw32-gcov        x86_64-w64-mingw32-lto-dump    x86_64-w64-mingw32-strings
x86_64-w64-mingw32-as          x86_64-w64-mingw32-g++         x86_64-w64-mingw32-gcov-dump   x86_64-w64-mingw32-nm          x86_64-w64-mingw32-strip
x86_64-w64-mingw32-c++         x86_64-w64-mingw32-gcc         x86_64-w64-mingw32-gcov-tool   x86_64-w64-mingw32-objcopy     x86_64-w64-mingw32-windmc
x86_64-w64-mingw32-c++filt     x86_64-w64-mingw32-gcc-10.2.0  x86_64-w64-mingw32-gfortran    x86_64-w64-mingw32-objdump     x86_64-w64-mingw32-windres
x86_64-w64-mingw32-cpp         x86_64-w64-mingw32-gcc-ar      x86_64-w64-mingw32-gprof       x86_64-w64-mingw32-ranlib      
x86_64-w64-mingw32-dlltool     x86_64-w64-mingw32-gcc-nm      x86_64-w64-mingw32-ld          x86_64-w64-mingw32-readelf   

我通过 HomeBrew 安装它这是我的 Makefile 中 libdir 的配置

prefix = /usr/local
exec_prefix = ${prefix}
libdir = ${exec_prefix}/lib
LDFLAGS = -Llibdir
...
    "libdir=$(libdir)" \
...

完全不知道如何解决这个问题。任何想法?或者,如果您需要更多信息来解决这个问题,请告诉我。

只要下载 GDB 的源代码,我想你可以复制同样的场景。

./libtool: line 5208: cd: libdir: No such file or directory
libtool: link: cannot determine absolute directory name of `libdir'
make[4]: *** [libbfd.la] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-bfd] Error 2
make: *** [all] Error 2

【问题讨论】:

  • 您检查目录libdir 是否存在?错误消息很清楚:工具libtool 找不到它。 - 顺便说一句,崩溃的不是Makefile,实际上没有程序崩溃。程序libtool 优雅而正确地退出并显示错误消息,程序make 将此消息转发给您并正确停止该过程。请准确措辞。
  • @thebusybee 是的,我做到了。 libtool 是由 make 命令提供/生成的。 libdir 只是一个由 Makefile 定义的环境变量。
  • 正如命令行和错误消息所说,你给libtool 不是正确的路径。命令行包含-Llibdir 并且错误消息显示“无法确定'libdir' 的绝对目录名称”。如果您更正 Makefile 并写入 LDFLAGS = -L${libdir},会发生什么? (或者,我会使用“make”:LDFLAGS = -L$(libdir) 带括号而不是花括号。)
  • @thebusybee 我知道,我认为它不应该是 -L$(libdir),因为 libdir 只是一个普通的路径。我不认为它会起作用,但无论如何,我会尝试 ${}。
  • @thebusybee OMG,我认为你说得对!

标签: c macos gcc makefile mingw32


【解决方案1】:

正如命令行和错误消息所说,您给 libtool 的路径不正确。

命令行包含-Llibdir,错误信息为“无法确定'libdir'的绝对目录名”。

所以你写了你的 Makefile 来使用 libdir 字面意思,而不是它应该的变量。改成:

LDFLAGS = -L$(libdir)

LDFLAGS = -L${libdir}

括号和大括号之间没有真正的区别,只是不要混淆它们。有用的链接是: The difference between parentheses and curly braces in GNU MakeWhat's the difference between parenthesis $() and curly bracket ${} syntax in Makefile?

【讨论】:

  • 错了!就 -L${} 的严格含义而言,它应该是 -L${},但使用 -L$() 可能仍然有效,但它应该是 -L${}
  • @Edee 请检查编辑是否让您平静下来。否则请详细说明“严格的含义”是什么意思。
  • 严谨的意思是${}和$()之间有明显的区别,没有真正的区别真的取决于误用的情况,在大多数情况下,$()只会起作用像 ${} 并不意味着它们在任何情况下都可以相同地工作。
猜你喜欢
  • 1970-01-01
  • 2018-08-04
  • 2020-06-08
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 2020-05-01
相关资源
最近更新 更多