バージョンのアップグレードによって変化しない数式コンテンツのパスを提供します。
このシナリオを検討してください。をHomebrewでビルドするとします。それはバージョン2.0.0であり、従ってそれは/usr/local/Cellar/libfoo/2.0.0/lib/libfoo.dylib
に住んでいます。あなたが構築している別のプログラムからそれにリンクしたいので、-L/usr/local/Cellar/libfoo/2.0.0/lib -lfoo
をgcc
に渡します。あなたのプログラムはコンパイルされます。その後、libfoo 2.0.1にアップグレードし、v2.0.0を削除します。現在/usr/local/Cellar/libfoo/2.0.0/lib/libfoo.dylib
は存在しなくなり、libfooを動的にロードすることができないため、プログラムはもはや実行されません。
これは問題ありません。 libfoo.dylib
は/usr/local/lib/libfoo.dylib
でも入手できます。 libfooの最新バージョンへのシンボリックリンクですので、常に存在するはずです。したがって、プログラムに-L/usr/local/lib -lfoo
を渡してコンパイルします。後でlibfoo 2.0.1にアップグレードします。 /usr/local/lib/libfoo.dylib
がまだ存在し、v2.0.1のコピーを指しているので問題ありません。
これは素晴らしいことですし、ホームブリューはしばらくの間、そのシステムだけで存在していました。問題は、いくつかの数式は「樽のみ」なので、/usr/local
からシンボリックリンクされていないということです。 (一般的には、OS Xに付属のライブラリのバージョンをシャドーするためにのみ使用され、OS Xライブラリを置き換えると問題が発生する可能性があります。)keg-onlyバージョンのライブラリにリンクしたいとします。 /usr/local/lib
からシンボリックリンクされていないので、/usr/local/Cellar
にインストールされているバージョンへの完全なパスを指定する必要があります。これは上記の最初の問題に戻ります。
/usr/local/opt
がこの問題を解決します。 keg-onlyであるかどうかに関係なく、のすべてのの式がシンボリックリンクされる場所が提供されます。今度は、あなたのプログラムをコンパイルしたいときは-L/usr/local/opt/libfoo/lib -lfoo
を使うことができます。あなたがアップグレードしても、それがkeg-onlyであってもあなたのプログラムはlibfooの最新バージョンにリンクします。
は、あなたの答えをありがとう! (そしてこの方法で私はこの質問を再開するのを助けるために)だから私はいつも/ usr/local/optを使うのが一番安全な選択だと思うが、Homebrewはまだ/ keym-onlyのためのシンボリックリンクを作成するために/ usr/local / –