新しいライブラリのパスを追加しますLD_LIBRARY_PATH
(Macでは名前が少し異なります...)
ソリューションは-L/my/dir -lfoo
オプションを使用して動作するはずです。実行時にLD_LIBRARY_PATHを使用してライブラリの場所を指定します。
LD_LIBRARY_PATHを使用する場合の注意 - 要約すると(リンクから):
..implications ..:
Security:LD_LIBRARY_PATHで指定されたディレクトリが標準の場所の前に検索される(!)ことを覚えていますか?このようにして、悪意のある人がアプリケーションに悪意のあるコードを含む共有ライブラリのバージョンをロードさせる可能性があります。これが、setuid / setgid実行可能ファイルがその変数を無視する理由の1つです!
パフォーマンス:リンクローダーは、共有ライブラリが存在するディレクトリが見つかるまで、指定されたすべてのディレクトリを検索する必要があります。すべての共有ライブラリに対して、アプリケーションはリンクされます!これは、open()への多くのシステムコールを意味し、「ENOENT(そのようなファイルまたはディレクトリはありません)」で失敗します!パスに多くのディレクトリが含まれている場合、失敗した呼び出しの数は直線的に増加し、アプリケーションの起動時間からそれを知ることができます。ディレクトリの一部(またはすべて)がNFS環境にある場合、アプリケーションの起動時間が長くなり、システム全体の速度が低下する可能性があります。
矛盾:これは最も一般的な問題です。LD_LIBRARY_PATHは、アプリケーションに、リンクされていない共有ライブラリを強制的にロードさせます。これは、元のバージョンと互換性がない可能性が非常に高いです。これは非常に明白である可能性があります。つまり、アプリケーションがクラッシュするか、選択したライブラリが元のバージョンで行っていたはずの動作を行わない場合、誤った結果が生じる可能性があります。特に後者はデバッグが難しい場合があります。
または
リンカーへのgccを介してrpathオプションを使用-ランタイムライブラリの検索パス。標準のdir(gccオプション)を検索する代わりに使用されます。
-Wl,-rpath,$(DEFAULT_LIB_INSTALL_PATH)
これは一時的な解決策に適しています。リンカーは、まず標準のディレクトリを調べる前に、LD_LIBRARY_PATHでライブラリを検索します。
LD_LIBRARY_PATHを永続的に更新したくない場合は、コマンドラインで即座に更新できます。
LD_LIBRARY_PATH=/some/custom/dir ./fooo
リンカーが知っているライブラリを確認することができます(例):
/sbin/ldconfig -p | grep libpthread
libpthread.so.0 (libc6, OS ABI: Linux 2.6.4) => /lib/libpthread.so.0
また、アプリケーションが使用しているライブラリを確認できます。
ldd foo
linux-gate.so.1 => (0xffffe000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7f9e000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0xb7e6e000)
librt.so.1 => /lib/librt.so.1 (0xb7e65000)
libm.so.6 => /lib/libm.so.6 (0xb7d5b000)
libc.so.6 => /lib/libc.so.6 (0xb7c2e000)
/lib/ld-linux.so.2 (0xb7fc7000)
libdl.so.2 => /lib/libdl.so.2 (0xb7c2a000)
libz.so.1 => /lib/libz.so.1 (0xb7c18000)
libfoo.*
ファイルが存在し、 -.so
W / O.0
、.a
、などなど?