Her zamanki Unix araç setini kullanarak uygulamalar geliştiriyorum: bir derleyici makeve paylaşılan kütüphaneler. Prosedür o zaman geleneksel olarak
./configureçalıştığı makinenin özellikleri için kaynakları uyarlayan,makeaslında paylaşılan kütüphaneleri, yürütülebilir dosyaları vb. derleyen,make check, paketi yüklemeden önce testleri yürüten,make install, paket düzgün davranıyorsa ve son olarak isteğe bağlı olarak,make installcheck, kurulumun çalıştığından emin olmak için.
Sırasında make, paylaşılan kütüphaneler ve yürütülebilir dosyalar nihai formlarında derlenir: yürütülebilir dosyalar nihai hedeflerindeki paylaşılan kütüphanelere bağımlılık ile derlenirler (yani, /usr/local/libhenüz orada olmadıkları halde kütüphanelere bağımlıdırlar , hala inşa halindedirler. ağacı). Daha sonra make install, kabaca, sadece cpyapı ağacından son yere libs ve yürütülebilir dosyaları yüklemek için kullanılır .
make checkAşama sırasında, kaldırılan programı çalıştırıyoruz: paylaşılan kütüphaneler, yürütülebilir dosyalar ve yardımcı dosyalar hala yapı ağacında. Testleri çalıştırmak için birkaç özel ortam değişkeni (örneğin programınıza yardımcı veri dosyalarınızın içinde değil /usr/local/share, kaynak ağacında olduğunu söylemek için) ve bazı sistem ortamı değişkenlerini ve paylaşım lib yükleyicinize bakmasını söylemek için Paylaşılan kütüphaneler için. Geleneksel Unices üzerindeki ortam değişkenleri, LD_LIBRARY_PATHOS X'te öyle DYLD_LIBRARY_PATH. Bu, onlarca yıldır çalıştı.
Ama şimdi, El Capitan bunu kırdı.
$ (export FOO=foo; env) | grep foo
FOO=foo
$ (export DYLDFOO=foo; env) | grep foo
DYLDFOO=foo
$ (export DYLD_FOO=foo; env) | grep foo
$
şimdi, SIP etkinleştirildiğinde, hiçbir DYLD_*işlem bir işlemden alt öğelerine aktarılmaz.
Benim sorum şu: Yüklü olmayan programları nasıl çalıştırabiliriz? Geleneksel Unix dizisini çalıştırmak için izlenecek prosedür nedir ./configure && make && make check?
Lütfen , " make installönce koş" gibi bir cevap yok . Konu o değil. Ben bir geliştirici ve "yapmak kontrol" (ve daha genel olarak bir programın yüklü olmayan bir sürümünü çalışan) çalışan çok sık yaptığım bir şeydir. Sahte bir yere kurmak bile zaman alıcıdır. Etkili ve verimli bir şeye ihtiyacım var . SIP'yi devre dışı bırakmak, paketleri çalıştırmak isteyen kullanıcılar için sorunu çözmez make check.
DYLD_INSERT_LIBRARIES=$HOME/.bin/lib/Apple80211 /Applications/Utilities/AirPort\ Utility\ 5.6.app/Contents/MacOS/AirPort\ Utility\ 5.6(Değişken görünmese deenv) 10.11 altında eski APU'yu (eski kütüphaneyle) çalıştırmak için hala kullanabilirim . Garip (ama işe yarıyor).