Her zamanki Unix araç setini kullanarak uygulamalar geliştiriyorum: bir derleyici make
ve paylaşılan kütüphaneler. Prosedür o zaman geleneksel olarak
./configure
çalıştığı makinenin özellikleri için kaynakları uyarlayan,make
aslı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/lib
henüz orada olmadıkları halde kütüphanelere bağımlıdırlar , hala inşa halindedirler. ağacı). Daha sonra make install
, kabaca, sadece cp
yapı ağacından son yere libs ve yürütülebilir dosyaları yüklemek için kullanılır .
make check
Aş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_PATH
OS 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).