엘 캐피 탄, 확인, DYLD_LIBRARY_PATH


9

컴파일러, 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_PATHOS 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. 이상합니다 (그러나 작동합니다).
nohillside

답변:


6

DYLD_ *는 "보호 된"바이너리에 대해서만 제거되는 것 같습니다 (정확히 그 의미가 확실하지 않지만 초보자를 위해 / bin 및 / usr / bin에있는 것은 확실합니다). 그러나 / usr / bin / env 다른 곳에서는 DYLD_ *를 유지합니다.

$ cp /usr/bin/env ~/Desktop; (DYLD_FOO=bar ~/Desktop/env)|grep DY
dyld: warning, unknown environment variable: DYLD_FOO
DYLD_FOO=bar

make는 항상 / bin / sh를 통해 명령을 실행하므로 makefile에서 "위험한"변수를 설정하여 명령에 영향을 줄 수는 없지만 테스트를 쉘 스크립트로 옮기고 환경 변수를 스크립트를 작성한 다음 make에서 스크립트를 호출하십시오. 분명히 이것은 테스트 쉘 스크립트 에 의존하거나 테스트 된 것이 쉘 스크립트 인 경우 / bin / sh를 호출하고 변수를 다시 잃을 것이기 때문에 도움이되지 않습니다 . .


고마워요! 이제 cp /bin/sh실제 쉘 대신 쉘을 사용할 수 있습니다 . Symlinks는하지 않으며 하드 링크는 "작업이 허용되지 않습니다"이므로와 함께 살아야한다고 생각 cp합니다.
akim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.