私は通常のUnixツールセットを使用してアプリケーションを開発make
します。コンパイラ、、および共有ライブラリです。手順は伝統的に次のようなものです
./configure
を実行するマシンの機能のソースを調整します。make
、実際には共有ライブラリ、実行可能ファイルなどをコンパイルします。make check
、パッケージをインストールする前にテストを実行し、make install
、パッケージが適切に動作する場合、最後にオプションで、make installcheck
、インストールが機能することを確認します。
の間make
、共有ライブラリと実行可能ファイルは、最終的な形式でコンパイルされます。実行可能ファイルは、最終的な宛先で共有ライブラリへの依存関係でコンパイルされます(つまり、ライブラリには依存し/usr/local/lib
ていませんが、まだビルドされています。木)。次にmake install
、大まかにcp
言って、ビルドツリーから最終的な場所にlibsと実行可能ファイルをインストールするためだけに使用します。
このmake check
フェーズでは、アンインストールされたプログラムを実行しています。共有ライブラリ、実行可能ファイル、補助ファイルは、ビルドツリーに残っています。テストを実行するには、いくつかのカスタム環境変数(たとえば、補助データファイルが/usr/local/share
ソースツリーではなくソースツリーにあることをプログラムに通知する)といくつかのシステム環境変数を設定して、共有ライブラリローダーに表示するように通知する必要があります。共有ライブラリ用。従来のUnicesの環境変数はLD_LIBRARY_PATH
OS XではそれですDYLD_LIBRARY_PATH
。これは(何十年も)働いてきました。
しかし今、エルキャピタンはこれを破った。
$ (export FOO=foo; env) | grep foo
FOO=foo
$ (export DYLDFOO=foo; env) | grep foo
DYLDFOO=foo
$ (export DYLD_FOO=foo; env) | grep foo
$
現在、SIPが有効になっている場合DYLD_*
、プロセスからその子には何もエクスポートされません。
だから私の質問です:インストールされていないプログラムをどのように実行できますか?従来のUnixシーケンスを実行できるようにするための手順は何./configure && make && make check
ですか?
してください、何の答えは次のような「実行しないmake install
第一」。それはポイントではありません。私は開発者であり、「make check」の実行(より一般的には、インストールされていないバージョンのプログラムの実行)は非常に頻繁に行います。ダミーの場所に設置するだけでも時間がかかります。私は何か効果的な、必要と効率的。また、SIPを無効にしても、実行したい私のパッケージのユーザーの問題は修正されませんmake check
。
DYLD_INSERT_LIBRARIES=$HOME/.bin/lib/Apple80211 /Applications/Utilities/AirPort\ Utility\ 5.6.app/Contents/MacOS/AirPort\ Utility\ 5.6
10.11で古いAPU(古いライブラリを使用)を実行するために使用できます(変数がに表示されない場合でもenv
)。奇妙です(しかし動作します)。