Mac OS X에서 DYLD_LIBRARY_PATH를 어디에 설정합니까? 좋은 생각입니까?


28

XCode로 작성한 코드와 함께 사용하기 위해 Mac (OS X)에 C ++로 작성된 솔버를 설치하려고합니다.

솔버 문서는 다음과 같이 말합니다.

"."가 있어야합니다. 당신의 DYLD_LIBRARY_PATH에의 순서

  • 준비된 실행 파일을 실행
  • libamg.dylib 및 gfortran RTSlib와 연결

나는 이것이 무엇을 의미하는지 정말로 이해하지 못한다. 무엇을 변경하려면 어디에서 무엇을해야합니까?

나는 인터넷 검색을 수행했지만 나와 같은 초보자를 위해 충분히 간단한 것을 발견하지 못했습니다! 저를 온라인 리소스로 안내하거나 환경 변수를 설정하는 방법과 장소에 대한 ab를 제공하지 않는 환자가 있다면 매우 감사하겠습니다.

답변:


20

환경 변수이므로 일반적으로 터미널에서 설정합니다.

export DYLD_LIBRARY_PATH=someValue

man dyld 말한다 :

DYLD_LIBRARY_PATH

이것은 라이브러리를 포함하는 콜론으로 구분 된 디렉토리 목록입니다. 동적 링커는 라이브러리의 기본 위치를 검색하기 전에 이러한 디렉토리를 검색합니다. 기존 라이브러리의 새 버전을 테스트 할 수 있습니다.

프로그램이 사용하는 각 라이브러리에 대해 동적 링커는 DYLD_LIBRARY_PATH차례로 각 디렉토리에서 해당 라이브러리를 찾습니다 . 여전히 도서관, 그 다음 검색을 찾을 수없는 경우 DYLD_FALLBACK_FRAMEWORK_PATHDYLD_FALLBACK_LIBRARY_PATH차례를.

-L옵션을 사용하십시오 otool(1). 실행 파일이 링크 된 프레임 워크 및 공유 라이브러리를 발견합니다.


아마도 다음과 같은 것을 원할 것입니다.

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH

.검색된 위치 목록 앞에 (현재 디렉토리) 를 추가 합니다. 수정되지 않은 OS X DYLD_LIBRARY_PATH에는 현재 값이 없습니다.

$ echo $DYLD_LIBRARY_PATH

$

프로그램을 실행하려는 방법에 따라 Xcode와 같이 다르게 설정해야합니다 (어딘지는 모르겠습니다).


1
난 당신이 일반적으로해야한다는 @TVNshack에 동의 하지 설정 DYLD_LIBRARY_PATHDYLD_FRAMEWORK_PATH이 시스템이 제공하는 libs와 찾아 그로드 libs가되지 않을 수 있기 때문에. 더 잘 작동하려면 FALLBACK버전을 대신 사용하십시오 . 이 답변에 대한 추가 정보 : stackoverflow.com/a/3172515/43615
SuperTempel

21

하나는 export DYLD_LIBRARY_PATH시스템에 설정해서는 안됩니다 .

공유 라이브러리 경로를 사용하여 고정 할 수 있습니다 otool -Linstall_name_tool.

예를 들어, Perl DBD-MySQL을 컴파일하면 링커가 MySQL을 설치 한 위치를 모르기 때문에이를 사용할 수 없습니다.

># make
....


># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)


#> install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib blib/arch/auto/DBD/mysql/mysql.bundle


># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)



#> make test
...
Result: PASS

#> make install

이것은 그렇게 간단합니다.


빠른 참고 : 새 경로가 대체하는 경로보다 길면 install_name_tool이 자동으로 실패합니다. 경로가 예상대로 변경되었는지 항상 'otool -L'로 확인하십시오.
user15685

다른 동적 라이브러리에 의존하는 플러그인 (기본적으로 동적 라이브러리 자체)을 컴파일한다고 가정 해 봅시다. 다른 사용자에게 플러그인 및 해당 종속성을 어떻게 제공해야합니까?
Royi

대신 설정하면 DYLD_FALLBACK_FRAMEWORK_PATH, 그것은 않습니다 이 경우 작업을. 앱과 함께 빌드 된 dylib를 제공해야하고 결국 경로를 예측할 수없는 경우 lib의 내부 경로를 변경하는 것보다 훨씬 쉽습니다.
SuperTempel

7

Xcode 4에서는 다음과 같은 오류를 피하기 위해 프로젝트 구성표에 추가 할 수 있습니다.

dyld: Library not loaded: @loader_path/libLeap.dylib
  Referenced from: /Users/paulsolt/Library/Developer/Xcode/DerivedData/LeapTest-eqcxmzewheyjusgrcszyvlcxlgna/Build/Products/Debug/LeapTest
  Reason: image not found
  1. 메뉴에서 "제품"-> "구성표 편집"-> "인수"탭-> "환경 변수 추가"-> 키 : DYLD_LIBRARY_PATH 값 : / Users / MyUserAccount / path / to / lib를 클릭하십시오.

  2. 사용자 계정의 경로와 라이브러리 폴더의 전체 경로를 변경하십시오.

  3. 빌드하고 실행할 수 있어야합니다.

Xcode 4에서 DYLD_LIBRARY_PATH 설정

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.