ฉันพัฒนาแอปพลิเคชันโดยใช้ชุดเครื่องมือ Unix ปกติ: คอมไพเลอร์make
และไลบรารีที่แบ่งใช้ ขั้นตอนตามธรรมเนียมแล้วสิ่งที่ชอบ
./configure
ซึ่งปรับแต่งแหล่งที่มาสำหรับคุณสมบัติของเครื่องที่ทำงานอยู่make
ซึ่งจริงๆแล้วเป็นการรวบรวม libs, executables และอื่น ๆmake check
ซึ่งจะทำการทดสอบก่อนที่เราจะติดตั้งแพ็คเกจmake install
ถ้าแพ็คเกจทำงานได้อย่างเหมาะสมและในที่สุดก็มีทางเลือกmake installcheck
เพื่อให้แน่ใจว่าการติดตั้งใช้งานได้
ในระหว่างmake
libs ที่ใช้ร่วมกันและ 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 install
first" นั่นไม่ใช่ประเด็น. ฉันเป็นนักพัฒนาซอฟต์แวร์และการเรียกใช้ "ตรวจสอบ" (และโดยทั่วไปแล้วเรียกใช้โปรแกรมรุ่นที่ไม่ได้ติดตั้ง) เป็นสิ่งที่ฉันทำบ่อยครั้งมาก แม้แต่การติดตั้งไปยังสถานที่จำลองก็ใช้เวลานาน ฉันต้องการบางสิ่งที่มีประสิทธิภาพและมีประสิทธิภาพ และปิดการใช้งาน 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
) แปลก (แต่ใช้งานได้)