2017-12-27 58 views
0

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で指定された検索パスのいずれかが、 。また、ライブラリパスの指定されたリストで最初にヒットしたと仮定します。

私の質問です。

  • これはサポートされている動作ですか?
  • ビルドスクリプトの絶対ライブラリパスを切り捨てるか、絶対パスを渡す方が良いでしょうか。

私はここで育ち、いくつかの関連する問題に気づく:

How to link using GCC without -l nor hardcoding path for a library that does not follow the libNAME.so naming convention?

これは、それがあるときので、任意のランタイム・ライブラリー・パスをオーバーライドする実行可能ファイルへのフルパスが「で燃焼」され「未検索」を示しています実行された?これは正しいです ?もしそうなら、それは、コマンドライン上のフルパスでライブラリを指定することが適切でないことを意味します。デプロイメント時に、ビルドされたアプリケーションと関連ライブラリは、標準の検索可能な場所にインストールされます。

答えて

1

私はコマンドの一部として完全なライブラリパスを渡し、-lを使用しないでください。この場合には言う: のgcc(他のオプション)

+0

それは、それがサフィックスを見てライブラリであることを意味するでしょうか? – peterk

+0

@peterk:いいえ、Unixは通常ファイルで十分ではありません。それはファイルの構造を見てライブラリであると判断します。 –

+0

@MartinBonner GCCは対応するスタブ '.a'ファイルを自動的に順番に検索しませんか? – user0042

0

注/path/to/library.so:このgcc(Raspbian 4.9.2-10)を使用しています。4.9.2ライブラリセットを作成しています。

[OK]を - ずっとそれを叩いおよびGCCの引数は明らかにそれがどこにあるか解決するために実行時に使用されているライブラリにハードコーディングされた絶対パスに燃えるよう完全なパスを使用して異なる場合

をテストします。これは、アプリケーションが別の場所に終わる可能性のある検索可能な共有ライブラリとともに展開されることが意図されているため、望ましくありません。

-llibmyLib.so does not work with a search path. 
-lmyLib   does work with a search path 
    (with lib prefix and suffix removed - apparently 
     it tries all available suffi and prepends "lib" for it's 
     search by default) 

- この情報によって

-l:libmyLib.so DOES work with a search path, 
       as ':' specifies the file name is not to be altered. 

-l:debug/libmyLib.so DOES work (a subdir under the search path) 
-l:release/libmyLib.so DOES work (a subdir under the search path) 

- (明らかに)それは私が今、前方に移動することができます何をするかを知ります!

関連する問題