Sample Header Ad - 728x90

Weird G++/AR Compilation issue

0 votes
0 answers
216 views
I'm working a patch-set to compile dpkg and APT onto Cygwin. I've almost got everything working, but I'm encountering some weird behavior with ar/g++ that I can't explain. APT's stock Makefile uses some fancy wrapping around a pretty standard .cc → .o → .a flow for support libraries, which are then linked in with the main code. It works great under Linux. Under Cygwin, however, the linker stage, using slightly different commands, fails in a way that I don't understand. Why is it that
g++ -g -O2 \
    -L../build/bin \
    -o ../build/bin/apt \
    ../build/obj/cmdline/apt.o \
    ../build/obj/apt-pkg/*.o \                                       ← (This is different.)
    -lapt-private -lbz2 -liconv -lintl -llzma -lz
works on my system, but
ar rcs ../build/bin/libapt-pkg.a ../build/obj/apt-pkg/*.o(This is different.)
g++ -g -O2 \
    -L../build/bin \
    -o ../build/bin/apt \
    ../build/obj/cmdline/apt.o \
    -lapt-pkg \                                                      ← (This is different.)
    -lapt-private -lbz2 -liconv -lintl -llzma -lz
doesn't? When I run the second one, libapt-pkg.a builds OK, but the g++ step produces errors of the form: $ g++ -g -O2 -L../build/bin -o ../build/bin/apt ../build/obj/cmdline/apt.o -lapt-pkg -lapt-private -lbz2 -liconv -lintl -llzma -lz 2>&1 | head ../build/bin/libapt-private.a(private-upgrade.o): In function `CacheFile': ./apt/apt-private/../build/include/apt-private/private-cachefile.h:47: undefined reference to `pkgCacheFile::pkgCacheFile()' ./apt/apt-private/../build/include/apt-private/private-cachefile.h:47:(.text+0x1e): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `pkgCacheFile::pkgCacheFile()' Shouldn't the two command sequences shown above be functionally equivalent? What's the difference?
Asked by Nicholas Clark (332 rep)
Aug 3, 2015, 07:27 AM
Last activity: Aug 3, 2015, 09:55 PM