Search code examples
cmacosgccmakefilemingw32

Makefile crashed while making after pass the ./configure --host=mingw32


Everyone: situation: MacOS with x86_64-w64-mingw32 compiling toolchain I tried to compile GDB for Windows from the source code of GDB. But, after ./configure, I got

/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

I am sure my MingW32 is fully built and capable.

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   

I install it via HomeBrew And here is the config for libdir in my Makefile

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

Totally have no idea how to fix this. Any idea? Or if you need some more information to figure it out, just let me know.

And just download the source code of GDB, I think you could duplicate the same scenario.

./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

Solution

  • As the command line and error message say, you give libtool not the right path.

    The command line contains -Llibdir and the error message says "cannot determine absolute directory name of 'libdir'".

    So you wrote your Makefile to use libdir literally and not as the variable as it should be. Change it into:

    LDFLAGS = -L$(libdir)
    

    or

    LDFLAGS = -L${libdir}
    

    There is no real difference between parentheses and braces, just don't mix them up. Helpful links are: The difference between parentheses and curly braces in GNU Make and What's the difference between parenthesis $() and curly bracket ${} syntax in Makefile?