2011-01-27 12 views
4

私はかなりの数のライブラリ(システム全体にインストールされていないいくつかの個人用ライブラリlibjpegのような一般的なシステムライブラリ)に依存するC++プログラムを持っています。プログラムはマシンA(Debian Squeeze)でうまくコンパイルされます。マシンB(Ubuntu maveric)とマシンC(Arch)でプログラムを実行したいと思います。両方のマシンB + Cが極端に最小限のインストールであると仮定します。私のプログラムがそこで使っているライブラリがあれば見つけたり、同じバージョンでないライブラリがあればそれを探してください。共有バイナリとは独立したバイナリのLinux

すべての依存関係(lddなど)を使用して自分のプログラムをスキャンできるプログラムはありますか?これらの依存関係をすべて収集し、これらを使用するようにバイナリに指示するスクリプトを生成します。 ?

ありがとうございました!

+4

これで幸いです。代わりに、コンベンションのようにソースを提供するだけでもいいです。 –

+1

私は "配達"するつもりはありません。私は自分のためにこれを使いたい。私はソースコードを持っていますが、再コンパイルは本当の苦痛になることがあります。コンパイラの例では、通常、別のバージョンのlibを使うのが安全だと仮定します。しかし、それは必ずしもそうではありません - 私は、プログラムがすべてのマシンで正確な同じライブラリを使用していることを100%確信したいと思っています。 – Joekk3

+1

あなたは正しいことをしているようには聞こえません。ソースから構築するのは簡単でなければなりません。私はあなたがいたならば、その問題を整理することに集中します。 –

答えて

2

私はあなたの質問を理解しているわけではありませんが、あなたのパッケージでライブラリを出荷したいと思っていて、LD_LIBRARY_PATHを使ってリンカが出荷前のライブラリディレクトリを何かの前に探すように思えます。

これ以上のことがあれば、私はこれにいくつかの経験があるので私の答えを修正することができます。ちょうど私があなたが求めているものを知っていることを確認したい。

+0

そうだね。だからそれは働くだろうか?コンパイラ(私の場合はgcc)は、LD_LIBRARY_PATHのlibsを/ usr/libのlibsの前に常に使用していますか?また、その場合:ldd -vからの出力を自動的に解析するプログラムがありますか(すべての依存関係を正しく把握する必要がありますか?)、すべてのlibをディレクトリにコピーしますか? – Joekk3

+1

+1をLD_LIBRARY_PATHソリューションに追加します。もう1つの選択肢は、すべての依存ライブラリの静的ビルドを作成し、それらをすべて1つのモノリシックバイナリにリンクすることです。 – gravitron

+0

Joekk、そうです。順序はrpaths(実行可能ファイルを要求する実行可能ファイルに焼き込まれたlibディレクトリ)、LD_LIBRARY_PATH、次に/etc/ld.so.confのデフォルトパスです。詳細については、http://linux.die.net/man/8/ld-linuxを参照してください。 –

2

あなたの質問への答えは静的にリンクすることです。たとえば、g ++ -staticと言います。

+0

+1、静的ビルドをリリースモードに分離し、デバッグ/開発モードでは存在しないことを条件とします。 –

+0

デバッグとリリースの違いは、-stripだけです。 – Joshua

+0

次に、標準ライブラリ以外に何かを含めると、ビルド時間が長くかかるという単なる事実のために愚かであると言います。 –

関連する問題