-l:/path/to/library
がld
のプログラムをコンパイルしようとしていますが、1台のコンピュータではld
が見つかりません。2台のコンピュータ間でldの動作が異なる
問題は、2番目のコンピュータでは、ld
が指定されたパスの先頭にパスを追加することがわかりましたが、なぜそれがそれを行うのか分かりません。
誰にも解決策がありますか?
-l:/path/to/library
がld
のプログラムをコンパイルしようとしていますが、1台のコンピュータではld
が見つかりません。2台のコンピュータ間でldの動作が異なる
問題は、2番目のコンピュータでは、ld
が指定されたパスの先頭にパスを追加することがわかりましたが、なぜそれがそれを行うのか分かりません。
誰にも解決策がありますか?
-l
は、ライブラリの名前を指定するためのものです。例えば。 -lfoo
と書いた場合、gccはlibfooを探します。最初に動的バージョン(libfoo.so
)が見つからない場合は、静的バージョンの場合はlibfoo.a
となります。 パスを含めるとでなく、です。
しかし、ここで、はgccでlibfoo.soを探しますか? これは2つのPCで異なる標準パスを使用しているため、一方のPCでは動作し、他方のPCでは動作しません。より多くのライブラリ検索パスを提案するには、パラメータ-L
を使用します。複数回出現することがあります。
例:gcc ... -lfoo -lbar -L/my/path/to/libraries1 -L/my/second/library/path
は、標準の検索ディレクトリ内などカスタムディレクトリ/my/path/to/libraries1
と/my/second/library/path
をlibfoo.so
とlibbar.so
探し(多分libfoo.a
とlibbar.a
)。ファイル名、ldはそれ以外の場合は、ライブラリパスを検索します、filenameというファイルのライブラリパスを検索します:フォーム のnamespecある場合
ld
の-lオプションのmanページには、
を語りますlibnamespec.aというファイルの場合
これは後にパスすることを私に言う:ライブラリ検索パスにを見つけることを試みます。したがって、パスは、ライブラリ検索パス内の各パスに関連するパスとして解釈されます。リンカーステートメントに-L/
を追加してみてください。これにより、リンク時の検索パスにルートディレクトリが追加され、リンカはルートディレクトリ内の-l:/path/to/library
を検索し、あたかも絶対パスであるかのように動作します。
各コンピュータでld --verbose | grep SEARCH
を使用してライブラリの検索パスを確認すると、1つが動作する理由ともう1つが動作しないことがわかります。私にとっては、図書館の検索結果に/はありません。-L/
を指定せずに絶対パスにリンクすることはできません。
'-l'はパスでは動作しません。 –
"パスを追加する"?別のパスに複数のパスを追加するとどういう意味ですか?私は理解できません –
私は-l:/usr/lib/libc.soをやっているとしましょう。 ldは、/usr/lib//usr/lib/libc.soを/lib//usr/lib/libc.soなどにロードしようとします。 – hawaya