奇怪的 G++/AR 编译问题

奇怪的 G++/AR 编译问题

我正在制作一个补丁集来编译dpkg并 APT 到 Cygwin 上。我几乎一切正常,但我遇到了一些我无法解释的ar奇怪行为。g++

APT 的库存 Makefile 使用一些奇特的包装来支持库的相当标准 .cc →  .o → .a流程,然后将其与主代码链接。它在 Linux 下运行得很好。然而,在 Cygwin 下,链接器阶段使用略有不同的命令,以我不理解的方式失败。

为什么会这样

g++ -g -O2 \
    -L../构建/bin \
    -o ../build/bin/apt \
    ../build/obj/cmdline/apt.o \
    ../build/obj/apt-pkg/*.o\ ←(这是不同的。)
    -lapt-私人-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-私人-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()'

上面显示的两个命令序列在功能上不应该是等效的吗?有什么不同?

相关内容