dpkg
Cygwin으로 컴파일하고 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()'
위에 표시된 두 명령 시퀀스는 기능적으로 동일해야 하지 않습니까? 차이점은 무엇입니까?