컴파일러, make
공유 라이브러리와 같은 일반적인 Unix 도구 세트를 사용하여 응용 프로그램을 개발합니다 . 절차는 전통적으로 다음과 같습니다
./configure
을 실행하는 머신의 기능에 맞게 소스를 조정합니다.make
실제로 공유 라이브러리, 실행 파일 등을 컴파일합니다.make check
패키지를 설치 하기 전에 테스트를 실행합니다 .make install
패키지가 올바르게 작동하고 마지막으로 선택적으로make installcheck
설치가 작동하는지 확인하십시오.
시 make
, 공유 libs와 및 실행이 최종 형태로 컴파일 : 실행 파일은 즉, 최종 목적지 (의 공유 libs와에 의존하여 컴파일, 그들은 도서관에 따라 /usr/local/lib
그들이 아직 아니지만, 그들은 빌드 여전히 나무). 그런 다음 make install
대략적으로 cp
빌드 트리에서 최종 위치에 libs 및 실행 파일을 설치 하는 데 사용 합니다.
make check
단계 동안 우리는 프로그램을 제거하고 있습니다 : 공유 라이브러리, 실행 파일 및 보조 파일은 여전히 빌드 트리에 있습니다. 테스트를 실행하려면 몇 가지 사용자 정의 환경 변수 (예 : 보조 데이터 파일이 아니라 /usr/local/share
소스 트리에 있음을 프로그램에 알리기 위해 ) 및 일부 시스템 환경 변수를 설정해야합니다. 공유 라이브러리 전통적인 Unices의 환경 변수는 LD_LIBRARY_PATH
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
첫 번째". 요점은 그것이 아니다. 저는 개발자이며 "make check"(보다 일반적으로 설치되지 않은 프로그램 버전을 실행)을 실행하는 것은 매우 자주 수행하는 작업입니다. 더미 장소에 설치하더라도 시간이 많이 걸립니다. 효과 적이고 효율적인 것이 필요합니다 . 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
. 이상합니다 (그러나 작동합니다).