GCC(リンク)は、絶対パスで指定したときにライブラリを見つけることができなかったことを示していました。これは、絶対パスですべてのライブラリを解決するビルドシステムを持っているため、順序付けられた一意のエントリを保持できるという理由からです。絶対パスでライブラリを指定するためのGCCの動作
g++ (...) -l/path/to/library.so
私は何人かの人々は、それはバグだと思った、と他の人は、それが今まで働いていた事実がバグだと思ったし、それが修正されたバグレポートを見ました。
いくつかの議論は、1つのパスでの前に持っていたことがありました「:」とにかく
はそれを動作させるませんでした。
ビルドシステムでテストするには、GCCに指定されたライブラリパスのどれかに "prefix"がマッチして絶対ライブラリパスが切り捨てられた場合、絶対ライブラリパスを切り捨てるようにコードを入れます。
g++ (...) -L/path/to -llibrary.so
これは機能しました。
私もこれを試しました。
g++ (...) -L/path/to -l/path/to/library.so
となりました。 GCCに指定された検索パスのいずれかが、絶対パスで指定されたライブラリの "接頭辞"であれば、ライブラリを見つけることができたようです(ビルドスクリプトでエラーが発生したように見えます)
GCCで指定された検索パスのいずれかが、 。また、ライブラリパスの指定されたリストで最初にヒットしたと仮定します。
私の質問です。
- これはサポートされている動作ですか?
- ビルドスクリプトの絶対ライブラリパスを切り捨てるか、絶対パスを渡す方が良いでしょうか。
私はここで育ち、いくつかの関連する問題に気づく:
これは、それがあるときので、任意のランタイム・ライブラリー・パスをオーバーライドする実行可能ファイルへのフルパスが「で燃焼」され「未検索」を示しています実行された?これは正しいです ?もしそうなら、それは、コマンドライン上のフルパスでライブラリを指定することが適切でないことを意味します。デプロイメント時に、ビルドされたアプリケーションと関連ライブラリは、標準の検索可能な場所にインストールされます。
それは、それがサフィックスを見てライブラリであることを意味するでしょうか? – peterk
@peterk:いいえ、Unixは通常ファイルで十分ではありません。それはファイルの構造を見てライブラリであると判断します。 –
@MartinBonner GCCは対応するスタブ '.a'ファイルを自動的に順番に検索しませんか? – user0042