問題タブ [unix-ar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - スタティック ライブラリ内のオブジェクト ファイルの順序
複数の静的ライブラリまたはオブジェクト ファイルにリンクする場合、順序が重要であることはわかっています (依存ライブラリは依存関係の前にリストする必要があります)。ar
でライブラリ ファイルを作成するときに、この同じルールが適用され、ライブラリ内の順序が重要なのか、同じ.a
ファイル内で違いがないのかを知りたいです。
複雑な依存関係グラフを含む 200 以上のオブジェクト ファイルをパックして、
正しい順序でリストするよりもはるかに簡単です。
gcc
違いがあれば、使用しています。
c++ - 奇妙な ar リンク エラー
- プロジェクトをゼロから作成する (作品)
- ファイルを変更せずにリメイクしてみる (うまくいかない)
- 静的ライブラリを削除
- ファイルを変更せずにもう一度作ります(動作します)
- ファイルを変更せずにもう一度作成します(機能しません)
ステップ 1 の形式は次のとおりです。
手順 2、3、および 4 の出力は次のとおりです。
linux - 繰り返しオブジェクト ファイルを含む静的ライブラリを抽出するにはどうすればよいですか?
2 つの静的ライブラリをマージする大きな静的ライブラリを構築しようとしています。現時点では、「ar」コマンドを使用して、たとえば「aa」と「ba」からオブジェクトを抽出し、「ar」を使用してこれらのオブジェクトを再構築しています。
残念ながら、aaには同じ名前の異なるオブジェクトが含まれているため、私の目的には適していません。「ar」コマンドは、繰り返されるオブジェクトを抽出し、既に抽出されたものを同じ名前に置き換えます。同じ名前でも、これらのオブジェクトには異なるシンボルがあるため、置換されたファイルとともに一部のシンボルが欠落しているため、未定義の参照が発生します。
私は元のオブジェクトにアクセスできず、すでに「ar xP」と「ar xv」、および多くの「ar stuff」を試しました。これらのライブラリをマージする方法を示すのを手伝ってくれる人はいますか?
前もって感謝します。
linux - 共有オブジェクトに静的ライブラリを含めますか?
一連の静的ライブラリを共有オブジェクトにコンパイルしたいと思います。これまでのところ、
上記の objs/*.o には、ar を使用してさまざまな静的ライブラリから抽出されたすべてのオブジェクト ファイルが含まれています。
更新: 基本的に、.a ファイルを抽出せずにコマンド ラインで直接使用できるかどうか疑問に思っています。
g++ - g++結合ライブラリ
だから、私はlibpthread.aライブラリを自分のライブラリに取り込もうとしています。しかし、それを使用するコードをコンパイルしようとすると、リンカーの問題が発生します。次のようにしてコンパイルします。
しかし、私はたくさんのundefined reference to 'pthread_stuff'
私は自分が間違っていることを本当に理解していません。
gcc - 静的ライブラリ(.a)をarを使用して別の静的ライブラリに含めることはできますか?
静的ライブラリにar'edされるディレクトリにいくつかの.oファイルがあるとしましょう:
別のディレクトリには、上記で作成したlibstuff.aに加えて、ar'edする必要のある他の.oファイルがいくつかあります。
libstuff.aを含めるとそこで機能すると思いましたが、それを実行すると未定義のシンボル(libstuff.aで定義する必要があります)が表示され、後でlibother.aとリンクしようとします。(g ++を使用)
.aをこのような静的ライブラリに結合する方法はありますか、それともこれは不可能ですか?
c++ - 自己登録型の抽象ファクトリをリンクする
ここで説明されているものに基づいて、自己登録型の抽象ファクトリを使用してテストしてきました。
https://stackoverflow.com/a/582456
私のすべてのテストケースで、それは魔法のように機能し、私が望んでいた機能と再利用を提供します。
私のプロジェクトで cmake を使用してこのファクトリにリンクするのは非常にトリッキーです (ただし、ar の問題のようです)。
リンクされた例と同じbase.hpp、derivedb.hpp/cpp、および同等のderiveda.hpp/cppがあります。主に、単純にファクトリをインスタンス化し、「DerivedA」と「DeriveddB」を使用して createInstance() を 2 回呼び出します。
次の行で作成された実行可能ファイル:
期待どおりに動作します。派生クラスをライブラリに移動すると (cmake を使用しますが、ar だけでもテストしました)、リンクに失敗します。
最初の静的インスタンス化のみを呼び出し (derivedA.cpp から)、2 番目の静的インスタンス化は呼び出しません。つまり、
ar 行で 2 つを交換すると、派生した b.cpp 静的インスタンス化のみが呼び出され、派生した a.cpp インスタンス化は呼び出されないことに注意してください。
C++ で静的変数をうまく処理できない ar または静的ライブラリで何か不足していますか?
c - 自分のライブラリへの未定義の参照
lib.a ファイルをいくつか作成しました
それから
で確認
しかし、テストアプリケーションをコンパイルしようとすると
関数で未定義の参照を取得しましたmain
: file1.o、file2.o、file3.o から使用された関数へ
android - 異なるバージョンの gcc と ld を混在させることはできますか?
私の環境は arm-linux-androideabi (東芝 AC100 上の Android 2.2) です。私の環境には 2 セットの GCC コンパイラがあります (デバイスの別の場所にインストールされています)。
- 4.4.3 ( Android 上の Android NDK )
- 4.6.0 ( Android では R + GCC )
私が直面している問題は、gcc-4.6.0 が実行されるたびに segfault が発生することです (ただし、すべてのタスクが正常に実行され、おそらく終了ルーチンで最後に segfault が発生するだけです)、ld-4.4.3 と ar-4.4.3 は失敗します。私の環境で実行します。一方、gcc-4.4.3 は美しく動作し、ld-4.6.0 や ar-4.6.0 も同様です。
したがって、デバイス上でビルド中に 4.4.3 を使用して configure を実行すると、configure ステップで失敗します。これは、configure テスト プログラムが正常にコンパイルされた場合でも、gcc segfault が発生し、ゼロ以外の値 (139) が返されるためです。ただし、configure を 4.6.0 で実行すると、configure は十分に実行されますが、ビルド ( make all
) はリンクと静的ライブラリの作成で惨めに失敗します。
私の質問は次のとおりです。
- gcc-4.4.3 を使用してオブジェクト ファイルをコンパイルし (
gcc-4.4.3 -c input.c
)、ld-4.6.0 とリンクすることはできますか (ld-4.6.0 -o input input.o -lc
)? つまり、問題のあるバイナリを削除し、動作するバイナリの組み合わせを使用してプロジェクトをビルドします。 - 警告がある場合、それは何ですか?
linker - unix でライブラリを作成する場合、「ar rcs」以外に必要なものはありますか?
1 つのファイルにまとめたいソース ファイルが多数あり.a
ます。コマンドでライブラリを作成します
.o
次に、ファイルの作成に使用したのと同じコンパイラ (g++)を使用して、このライブラリへのリンクを試みます。
しかし、次の形式の thing1.cpp (および理論的には thing.o で表される) で定義された関数を使用しようとすると、エラーが発生します。
.a
ファイルにリンクできるようにするために、ファイルに対して他に何かする必要がありますか?