ビルドプロセスで以前にコンパイルされたオブジェクトファイルと既存の静的ライブラリを含むスタティックライブラリを1つ作成しようとしています。 "ar"を使ってこれを行う簡単な方法はありますか、各ライブラリを展開し(ar x library_name)、そのオブジェクトファイルを統合ライブラリに追加する必要がありますか?"ar"を使って.oと.aファイルを結合する(Linux)
答えて
他のライブラリからオブジェクトファイルを抽出し、抽出したオブジェクトファイルをコンポジットライブラリにバンドルする必要があります。あなたはこれを使用することができ、共有ライブラリを作成したい場合はld -r
:
はまた、増分ロードを考慮
あなたはldから--whole-アーカイブフラグを使用することができます。
--whole-archive
コマンドラインで--whole-archiveオプションの後に記載されているアーカイブごとに、アーカイブ内のすべてのオブジェクトファイルを必要なオブジェクトファイルのアーカイブを検索するのではなく、リンクを使用します。これは、通常、アーカイブファイルを共有ライブラリに変換し、すべてのオブジェクトを結果としての共有ライブラリに含めるために使用されます。このオプションは複数回使用できます。gccからこのオプションを使用する場合、2つの注意点があります。まず、gccはこのオプションについて知らないため、-Wl、-whole-archiveを使用する必要があります。第2に、あなたのアーカイブのリストの後ろに-Wl、-no-whole-archiveを使うのを忘れないでください.gccは自分のアーカイブのリストをあなたのリンクに追加します。
静的ライブラリの場合、最初にオブジェクトを抽出する必要があります。
GNU ARは、必要に応じて、アーカイブのメンバーファイルの元のコピーにシンボルインデックスと参照を含んでいる薄いアーカイブを作成することができますのために私は、次を発見しました。このようなアーカイブは、リロケータブルオブジェクトが利用可能であると予想されるローカルビルド内で使用するためのライブラリを構築する場合に便利です。また、各オブジェクトのコンテンツをコピーするだけでは時間と空間が浪費されます。シンアーカイブもフラット化されているため、シンプルアーカイブに1つ以上のアーカイブを追加すると、ネストされたアーカイブの要素が個別に追加されます。アーカイブの要素へのパスは、アーカイブ自体に関連して格納されます。
このようなの薄いアーカイブを使用できますか?
アーカイブのアーカイブは常に可能です。実際のAPIが実装から呼び出されているときに動作するかどうかはテストしませんでした。
例:AR RC lib1.a obj1.o AR RC lib2.a obj2.o AR RC lib3.a lib1.a lib2.a
you can check the contents of lib3.a by trying out.
ar x lib3.a which would extract lib1.a and lib2.a
しかし、あなたはAPIを呼び出す構築する必要がありますobj1.oとobj2.oから個々のアーカイブからオブジェクトファイルを抽出する必要はありません。
希望すると助かります!
- 1. .oファイルと.aファイル
- 2. .oと.aファイルから.aを作成する方法は?
- 3. naudioを使ってmp3ファイルとwavファイルを結合する方法C#MVC?
- 4. アンパックとパッキングに "ar"を使ってdebパッケージをパッチする
- 5. 構造体を使ってMatlabファイルを結合する
- 6. LinuxとMac OS Xの.oファイル
- 7. Makefileとgccを使って.oファイルの名前を変更
- 8. .oファイルをLinuxカーネルモジュール(.ko)ファイルにコンパイルするには?
- 9. ビルドツールとしてnpmを使ってファイルを連結する
- 10. 仮想ARとiOS、アンドロイド用のARを使って時計とジュエリーを試してみよう
- 11. サブフォルダをまとめて結合する、Linux
- 12. パンダを使ったCSVファイルの結合(マージと複製)
- 13. Linuxで大きなファイルを追加/連結する場合
- 14. 2つの結合テーブルを区別します。AR
- 15. 分割されたファイルを結合して同じコマンドを解凍する[LINUX]
- 16. Linuxでcronジョブを使って古いファイルを削除する
- 17. bmpファイルをlinuxでcを使って保存する
- 18. Haskellを使ってLinuxファイルのファイルパーミッションをチェックする方法は?
- 19. * .aファイルをsvnXを使ってリポジトリに追加するには?
- 20. テンソルフローgfileを使用する理由(ファイルI/Oの場合)
- 21. Linux I/Oマネージャー
- 22. リモートの.gitattributeファイルをローカルの.gitattributeファイルとマージ戦略結合を使ってマージする
- 23. makefileを使って.oと.exeファイルを/ build /ディレクトリに置く方法
- 24. .oファイルを使用して.koファイルを作成する
- 25. teeを使ってファイルをランダムに更新すると、linux bashスクリプト
- 26. LinuxとWindowsの間でpysftp.get_rを使ってファイルを転送する
- 27. GCCを使ってLinuxをビルドする
- 28. 複数のファイルをファイル名で区切ったコンテンツに連結するlinuxコマンド?
- 29. linuxを使ってファイルを複数のファイルに分割する方法は?
- 30. 1行のlinuxコマンドを使ってファイルを探すには?
可能な重複http:// stackoverflow。com/questions/386579/pack-shared-libraries-to-the-elf –
いいえ、重複はありません。この質問は、共有ライブラリとの再リンクを試みることを扱いますが、この質問は、まだリンクされていない静的ライブラリやオブジェクトを扱います。 – ephemient
ビルドプロセスを制御する場合、このパターンはきれいな解決策のようです:http://stackoverflow.com/a/4318960/78342 – Chinasaur