ฉันพัฒนาแอปพลิเคชันโดยใช้ชุดเครื่องมือ Unix ปกติ: คอมไพเลอร์makeและไลบรารีที่แบ่งใช้ ขั้นตอนตามธรรมเนียมแล้วสิ่งที่ชอบ
./configureซึ่งปรับแต่งแหล่งที่มาสำหรับคุณสมบัติของเครื่องที่ทำงานอยู่makeซึ่งจริงๆแล้วเป็นการรวบรวม libs, executables และอื่น ๆmake checkซึ่งจะทำการทดสอบก่อนที่เราจะติดตั้งแพ็คเกจmake installถ้าแพ็คเกจทำงานได้อย่างเหมาะสมและในที่สุดก็มีทางเลือกmake installcheckเพื่อให้แน่ใจว่าการติดตั้งใช้งานได้
ในระหว่างmakelibs ที่ใช้ร่วมกันและ executables จะถูกรวบรวมในรูปแบบสุดท้ายของพวกเขา executables จะถูกรวบรวมด้วยการพึ่งพา libs ที่ใช้ร่วมกันในปลายทางสุดท้ายของพวกเขา (เช่นพวกเขาขึ้นอยู่กับห้องสมุดใน/usr/local/libแม้ว่าพวกเขาจะไม่ได้มีพวกเขายังคงอยู่ในการสร้าง ต้นไม้). จากนั้นmake installคือประมาณเพียงแค่ใช้cpเพื่อติดตั้ง libs และ executables จากโครงสร้างต้นไม้ไปยังสถานที่สุดท้าย
ในระหว่างmake checkเฟสเรากำลังเรียกใช้โปรแกรมที่ถอนการติดตั้ง: libs ที่ใช้ร่วมกันไฟล์ปฏิบัติการและไฟล์เสริมยังคงอยู่ในโครงสร้างการสร้าง ในการรันการทดสอบคุณต้องตั้งค่าตัวแปรสภาพแวดล้อมที่กำหนดเองไม่กี่ตัว (ตัวอย่างเช่นเพื่อบอกโปรแกรมของคุณว่าไฟล์ข้อมูลเสริมของคุณไม่ได้อยู่ใน/usr/local/shareแต่ในต้นไม้ต้นกำเนิด) และตัวแปรสภาพแวดล้อมของระบบบางตัว สำหรับ libs ที่ใช้ร่วมกัน ตัวแปรสภาพแวดล้อมแบบดั้งเดิมบน Unices เป็นLD_LIBRARY_PATHบน OS X DYLD_LIBRARY_PATHมันเป็น สิ่งนี้ใช้ได้ผลมาหลายสิบปี
แต่ตอนนี้ El Capitan ได้ทำลายสิ่งนี้
$ (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คืออะไร
กรุณาไม่มีคำตอบเช่น "run make installfirst" นั่นไม่ใช่ประเด็น. ฉันเป็นนักพัฒนาซอฟต์แวร์และการเรียกใช้ "ตรวจสอบ" (และโดยทั่วไปแล้วเรียกใช้โปรแกรมรุ่นที่ไม่ได้ติดตั้ง) เป็นสิ่งที่ฉันทำบ่อยครั้งมาก แม้แต่การติดตั้งไปยังสถานที่จำลองก็ใช้เวลานาน ฉันต้องการบางสิ่งที่มีประสิทธิภาพและมีประสิทธิภาพ และปิดการใช้งาน SIP make checkจะไม่แก้ไขปัญหาสำหรับผู้ใช้ของแพคเกจของฉันที่ต้องการเรียกใช้
DYLD_INSERT_LIBRARIES=$HOME/.bin/lib/Apple80211 /Applications/Utilities/AirPort\ Utility\ 5.6.app/Contents/MacOS/AirPort\ Utility\ 5.6เพื่อเรียกใช้ APU เก่า (กับไลบรารี่เก่า) ภายใต้ 10.11 (แม้ว่าตัวแปรจะไม่แสดงขึ้นมาenv) แปลก (แต่ใช้งานได้)