이상한 G++/AR 컴파일 문제

이상한 G++/AR 컴파일 문제

dpkgCygwin으로 컴파일하고 APT하도록 패치 세트를 만들고 있습니다 . 거의 모든 것이 잘 작동하고 있지만 설명할 수 없는 ar이상한 동작이 발생하고 있습니다.g++

APT의 기본 Makefile은 라이브러리의 상당히 표준적인  →→  .cc 흐름을  지원하기 위해 멋진 래퍼를 사용하며 , 그런 다음 기본 코드와 연결됩니다. Linux에서는 매우 잘 실행됩니다. 그러나 Cygwin에서 링커 단계는 약간 다른 명령을 사용하고 내가 이해할 수 없는 방식으로 실패합니다..o.a

왜 이런 일이 일어나는 걸까요?

g++ -g -O2 \
    -L../빌드/bin \
    -o ../build/bin/apt \
    ../build/obj/cmdline/apt.o \
    ../build/obj/apt-pkg/*.o\ ←(이것은 다릅니다.)
    -lapt-private-lbz2-liconv-lintl-llzma-lz

내 시스템에서는 작동하지만

ar rcs ../build/bin/libapt-pkg.a ../build/obj/apt-pkg/*.o(이것은 다릅니다.)
g++ -g -O2 \
    -L../빌드/bin \
    -o ../build/bin/apt \
    ../build/obj/cmdline/apt.o \
    -lapt-pkg\ ←(이것은 다릅니다.)
    -lapt-private-lbz2-liconv-lintl-llzma-lz

아니요? 두 번째 단계를 실행하면 libapt-pkg.a빌드가 제대로 작동하지만 해당 g++단계에서 다음 형식의 오류가 발생합니다.

$ 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()'

위에 표시된 두 명령 시퀀스는 기능적으로 동일해야 하지 않습니까? 차이점은 무엇입니까?

관련 정보