静的ライブラリに対して静的にリンクする共有オブジェクトをコンパイルするときに、多くの問題が発生しました。この問題は、x84_64プラットフォームでのみ発生します。 x86_32で同じコンパイル作業を行う場合、問題はありません。
おそらくこれはOS固有のGCC構成のことですが、私の研究では、x86_64プラットフォームでGCCがどのように機能するかを示しています。とにかく、私はUbuntu 10.04 x86_64でgcc 4.4.3を使用しています。
問題はどのように修正されますか?...すべての静的ライブラリの依存関係が-fPICでコンパイルされていることを確認します。
質問1: -fpicと-fPICの違いは何ですか(どうやら-fPICはx86でより多くの命令を生成します)?なぜ後者のタイプはx86_64コンテキストでより関連があるのですか?
質問2:静的コードに対してリンクすると、リンク時に関数をバイナリにハードワイヤリングしているのに、「位置に依存しないコード」機構が提供する間接参照のレベルが必要なのはなぜですか? ?
質問3:ここで、x86が-fpic/-fPICを必要としない場合、静的オブジェクトに対して共有オブジェクトをリンクするのに、なぜx86_64で必要なのですか?
質問4:必要な場合でも、暗黙的に提供されないのはなぜですか?変更を壊すのは大きなノーノーだと思った
また、私のアドバイスは次のとおりです。それについて心配する必要がある場合は、それを間違っています(または、難しい方法を学びたい場合は、経験からより多くを得ることができるので、ニースです)。コンパイルシステム(libtool、cmakeなど、使用するものはすべて)がそれを行うはずです。