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
いいえ? 2番目のステップを実行すると、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()'
上記の2つのコマンドシーケンスは機能的に同じでなければなりませんか?違いは何ですか?