私のチームのプロジェクトの開発方法では、すべての.o
オブジェクト ファイルからアプリケーション用の共有オブジェクト ライブラリを生成します。私の仕事 (うまくいけば、それは十分に具体的であると同時に、他の人に役立つほど一般的でもあります!) は、実行可能ファイルが最後に作成されてから変更されたオブジェクト ファイルのみをリンクすることです。たとえば、.so のビルドに使用するコマンド ラインは次のとおりです。
g++34 -shared -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject2.o MyObject3.o MyObject4.o -o libMySharedLibrary.so
これは期待どおりに機能します。:)私の目標は、変更されたオブジェクトファイルのみをリンクできるようにして、同時リンクプロセスを高速化することです。コマンドの例は次のとおりです。
g++34 -shared -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject3.o -o libMySharedLibrary.so
libMySharedLibrary.so
古いオブジェクトファイルも維持しながら、新しいオブジェクトファイルで更新されますlibMySharedLibrary.so
。実際、libMySharedLibrary.so
上記のコマンドで生成すると、すべてのオブジェクト ファイルが含まれている場合よりもファイル サイズが大幅に小さくなっているため、上記のコマンドが意図したとおりに実行されていないことはほぼ確実です。
私の調査を通じて、-i
オプションと同じリンカのオプションがあることがわかりました。これは、-r
すべてのオブジェクト ファイルを 1 つの大きなオブジェクト ファイルに結合するだけのように見えます。残念ながら、これが私が望むものではないようです。
要するに、最初のリンク後に変更されたオブジェクト ファイルのみをリンクして、将来のリンクのリンク プロセスを高速化したいと考えています。これを行う方法はありますか?
編集:私が試したものの例-i/-r
:
コマンド例:g++34 -Wl,-r -nostdlib -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject2.o MyObject3.o MyObject4.o -o AllMyObjects.o
-nostdlib
タグが必要だと叫ぶのを止めるためにタグを追加する必要があり、-shared
共有オブジェクトは-r
タグで許可されていないため削除しました。
このコマンドは、すべての .o ファイルを 1 つの大きな .o ファイルにまとめるように見えます。したがって、変更された .o ファイルのみを使用して、これからその .o ファイルを更新できれば、それは素晴らしいことです。AllMyObjects.o が最初に作成された後、次のコマンドを試しましたg++34 -Wl,-r -nostdlib -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject3.o -o AllMyObjects.o
: AllMyObjects.o
これは私が小さな間違いを犯している可能性が高いものだと感じています。誰にもアドバイスはありますか?前もって感謝します。