मैं सामान्य यूनिक्स टूल सेट का उपयोग करके एप्लिकेशन विकसित करता हूं: एक संकलक make
, और साझा लाइब्रेरी। प्रक्रिया तो परंपरागत रूप से कुछ पसंद है
./configure
, जो मशीन की सुविधाओं के लिए स्रोतों को चलाता है, जिस पर इसे चलाया जाता है,make
, जो वास्तव में साझा किए गए लिबास, एक्ज़ीक्यूटेबल्स आदि को संकलित करता है,make check
, जो पैकेज को स्थापित करने से पहले परीक्षण चलाता है ,make install
, अगर पैकेज ठीक से व्यवहार करता है, और अंत में, वैकल्पिक रूप से,make installcheck
, यह सुनिश्चित करने के लिए कि इंस्टॉलेशन काम करता है।
इस दौरान make
, साझा किए गए परिवादों और निष्पादनयोग्य को उनके अंतिम रूप में संकलित किया जाता है: निष्पादन योग्य अपने अंतिम गंतव्य में साझा कामों के लिए एक निर्भरता के साथ संकलित किए जाते हैं (अर्थात, वे पुस्तकालयों पर निर्भर करते हैं, /usr/local/lib
हालांकि वे अभी तक वहां नहीं हैं, फिर भी वे अभी भी निर्माण में हैं पेड़)। फिर make install
, मोटे तौर पर सिर्फ cp
निर्माण के पेड़ से अंतिम स्थान तक लिबास और निष्पादन योग्य स्थापित करने के लिए उपयोग कर रहा है।
make check
चरण के दौरान , हम प्रोग्राम को अनइंस्टॉल कर रहे हैं: साझा किए गए काम, निष्पादन योग्य और सहायक फाइलें अभी भी बिल्ड ट्री में हैं। परीक्षण चलाने के लिए आपको कुछ कस्टम वातावरण चर सेट करने होंगे (उदाहरण के लिए अपने प्रोग्राम को यह बताने के लिए कि आपकी सहायक डेटा फ़ाइलें /usr/local/share
स्रोत ट्री में नहीं हैं), और कुछ सिस्टम वातावरण चर, अपने हिस्से को देखने के लिए लिबर लोडर बताने के लिए। साझा कामों के लिए। पारंपरिक LD_LIBRARY_PATH
X पर पर्यावरण चर है , 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_*
भी प्रक्रिया अपने बच्चों को निर्यात नहीं की जाती है।
तो मेरा सवाल यह है: हम ऐसे प्रोग्राम कैसे चला सकते हैं जो इंस्टॉल नहीं हैं? पारंपरिक यूनिक्स अनुक्रम को चलाने में सक्षम होने के लिए क्या प्रक्रिया है ./configure && make && make check
?
कृपया , कोई जवाब नहीं जैसे कि " make install
पहले चलाएं "। ये मुद्दा नहीं है। मैं एक विकासकर्ता हूं, और "चेक बना" चला रहा हूं (और आमतौर पर एक प्रोग्राम के गैर-स्थापित संस्करण को चलाने वाला) कुछ ऐसा है जो मैं अक्सर करता हूं। यहां तक कि डमी जगह पर स्थापित करने में समय लगता है। मुझे कुछ प्रभावी, और कुशल चाहिए। और 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
)। अजीब (लेकिन यह काम करता है)।