2011-06-17 13 views
0

私が実験している一般的なオープンソースプロジェクトのMakefileに関連すると思われる奇妙な問題があります。私はMakefileのエキスパートではなく、通常の./configureとmake installだけを行っています。デベロッパーライブラリではなく、インストールされているライブラリにリンクする

基本的には、ライブラリにコンパイルされたソースコードに簡単なprint文を追加しています。印刷ステートメントは表示されません。私はデバッガでライブラリにステップインしてみると、セクション全体をスキップするだけです(-g -O0でコンパイルされました)。これは私がmakeを実行すると、私のdev srcフォルダに最近コンパイルされたライブラリの代わりに、私のシステム上にインストールされているライブラリにリンクしていると信じています。

関連に見えるメイクファイルの1行があります: 接頭辞=は/ usr/local

私が作ることができ、またはとにかく私の疑念を確認するために、任意の容易な変更は?

+0

更新:Linuxを実行中です。 ldd は「動的実行可能ではありません」を返すので、静的にコンパイルされているように見えます。 ubuntuにはlibpopplerパッケージがインストールされていますが、これらは動的ライブラリであると思います。うーん、ここからどこに行くのかわからない。 –

+0

Update2:提供されたメイクファイルをcmakeが生成したものに置き換えました。すべてが今は大丈夫です。私はそれが過度に複雑なメークファイルのケースに過ぎないと思う。 –

答えて

0

ライブラリーが動的にリンクされている場合、実行中の実行可能ファイルにはlddを実行して、選択中のファイルを判別することができます。予想外の場合は、LD_LIBRARY_PATHを設定して、共有オブジェクトの検索パスを上書きすることができます。静的にリンクされている場合、パスはmakefileのどこかにある必要があります。それを見つけるためにgrepを使います。

0

あなたはOSは言いませんが、Linuxでは/ proc // mapsをチェックすることで特定のライブラリにロードされた正確なファイルが分かるはずです。だから今、私はそれはncursesを知っ

7f25ab1e4000-7f25ab224000 r-xp 00000000 08:01 6029412     /lib/libncurses.so.5.7 
    7f25ab224000-7f25ab423000 ---p 00040000 08:01 6029412     /lib/libncurses.so.5.7 
    7f25ab423000-7f25ab427000 r--p 0003f000 08:01 6029412     /lib/libncurses.so.5.7 
    7f25ab427000-7f25ab428000 rw-p 00043000 08:01 6029412     /lib/libncurses.so.5.7 

:たとえば、私は私のシェルのlibncurses.soを提供するために使用されたどのファイルを知りたい場合は、私が行うこともできますように私に出力を取得

$ cat /proc/$$/maps | grep ncurses 

.soは/lib/libncurses.so.5.7で満足しました

あなたのプロセスでは、実行中のプロセスのPIDで '$$'を置き換えてください。他のUNIX系オペレーティングシステムには、通常、/ procのようなインタフェースや実行中のプロセスに関するこの情報を与えるシステムツールがあります。 Solarisの場合、 'pldd'コマンドはldd出力に相当するが、実行中のプロセスに対して表示することができます。

関連する問題