일부 dylib를 성공적으로 호출하는 응용 프로그램 (실행 파일)을 만들었지 만 dylib 파일과 실행 파일은 다른 디렉토리에 있습니다. $ PATH 환경 변수에 dylib 파일이 들어있는 디렉토리를 추가했지만 여전히로드되지 않습니다. 모든 dylib 파일을 실행 파일에 복사하면 프로그램이 마침내 실행됩니다. 이것은 dylib 파일에 문제가 없음을 확인합니다. 그러나 OS에서 어떻게 찾을 수 있습니까? Windows에서 $ PATH에 dll 파일이 들어있는 디렉토리 경로를 추가하기 만하면됩니다. Mac OS X에서는 무엇이 필요합니까? 감사합니다.Mac OS X에서 dylib 사용 방법 (C++)
답변
dylib가 라이브러리의 INSTALL_NAME에 지정된 위치에 있으면 Just Work *가됩니다.
그렇지 않은 경우 dylib의 위치를 DYLD_LIBRARY_PATH에 추가 할 수 있습니다. dyld documentation을 읽어 보시기 바랍니다.
*)가 완전히 정확하려면 DYLD_ROOT_PATH/INSTALL_NAME에 있어야하지만 DYLD_ROOT_PATH를 사용하는 것은 매우 드뭅니다.
죄송합니다. "도서관의 INSTALL_NAME"은 무엇입니까? DYLD_LIBRARY_PATH를 추가하면 작동하지 않으므로 혼란 스럽습니다. –
변수를 내 보내야합니다 : export DYLD_LIBRARY_PATH =/usr/local/lib' – Michel
DYLD_LIBRARY_PATH
환경 변수를 설정해야합니다. dyld man page에서
:
This is a colon separated list of directories that contain libraries. The dynamic linker
searches these directories before it searches the default locations for libraries. It allows
you to test new versions of existing libraries.
For each library that a program uses, the dynamic linker looks for it in each directory in
DYLD_LIBRARY_PATH in turn. If it still can't find the library, it then searches DYLD_FALL-
BACK_FRAMEWORK_PATH and DYLD_FALLBACK_LIBRARY_PATH in turn.
감사합니다! 또한 Google에서 찾았지만 DYLD_LIBRARY_PATH를 설정했지만 문제가 해결되지 않았습니다. 나는 매우 혼란 스럽다. –
방금 시도해 보니 내 Mac에서 잘 작동한다. – EmeryBerger
안녕하세요, EmeryBerger, DYLD_LIBRARY_PATH 변수가 원래 비어 있습니다. 내 것이. 처음에 이것이 틀린 지 나는 모른다. –
많은 방법. 어쩌면이 도움이 될 것입니다
http://www.mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html
저스틴 제공하는 링크를 읽은 후, 나는 성공적으로 내 실행 파일이 위치한 동일한 디렉토리를 가리 키도록 내 dylib의 install_name을 변경하려면 @executable_path
토큰을 사용할 수 있었다.
@executable_path 절대 경로는 성가신입니다. 때로는 프레임 워크를/Library 또는 비슷한 위치에 설치해야하는 대신 프레임 워크를 응용 프로그램에 임베드하려고합니다.
Mac의 해결책은 @executable_path입니다. 이것은 라이브러리의 설치 이름의 시작 부분에 배치 될 때 인데, 은로드하는 실행 파일의 경로에서 마지막 구성 요소 인 을 뺀 경로로 확장됩니다. 예를 들어 Bar.app가 Foo.framework에 링크한다고 가정 해 보겠습니다. Bar.app가/Applications에 설치된 경우 @executable_path가 /Applications/Bar.app/Contents/MacOS로 확장됩니다. 프레임 워크를 Contents/Frameworks에 포함하려는 경우 은 Foo.framework의 설치 이름을 @executable_path /../ Frameworks/Foo.framework/Versions/A/Foo로 설정할 수 있습니다. 동적 링커는 /Applications/Bar.app/Contents/MacOS/../Frameworks/Foo.framework/Versions/A/Foo 으로 확장하여 프레임 워크를 찾을 수 있습니다.
http://www.mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html
나는 예제를 보여줄 것입니다.
의가/I는 다음과 같은 실행 /옵션/지방/빈이 있다고 변환을하고 dylibs이 /옵션 /에 lib 디렉토리/로컬 보자. 다른 dir에 복사하고 실행 파일을 복사 한 디렉토리와 동일한 디렉토리에서 dylib를로드하려고합니다.
> mkdir ~/tmp/bin
> cp /opt/local/bin/convert ~/tmp/bin
받기 실행 파일의 목록
> otool -L ~/tmp/bin/convert
~/tmp/bin/convert:
/opt/local/lib/libtiff.3.dylib (compatibility version 13.0.0, current version 13.5.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
/opt/local/lib/libjpeg.8.dylib (compatibility version 12.0.0, current version 12.0.0)
/opt/local/lib/libfontconfig.1.dylib (compatibility version 6.0.0, current version 6.4.0)
/opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
/opt/local/lib/libfreetype.6.dylib (compatibility version 15.0.0, current version 15.0.0)
/opt/local/lib/libexpat.1.dylib (compatibility version 7.0.0, current version 7.2.0)
/opt/local/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.6)
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.6)
...
나는 단지 /옵션/지역/lib에 디렉토리에서 dylibs 걱정, 그래서 우리는 만 dylibs를 꺼내/을 선택 dylibs . 나는 다른 모든 dylib 참조를 특히 /usr/lib/libSystem에 그대로 유지하려고합니다.
> DYLIBS=`otool -L ~/tmp/bin/convert | grep "/opt" | awk -F' ' '{ print $1 }'`
실행 파일이 복사 된 동일한 dir에 실행 파일이 참조하는 모든 dylib를 복사하십시오.
> for dylib in $DYLIBS; do cp $dylib ~/tmp/bin/; done;
우리가 위의 단계에서 꺼내 모든 dylibs의 설치 이름을 변경 install_name_tool
를 사용하고 dylib 이름으로 @executable_path
를 앞에 붙이는 교체합니다. 이렇게하면 동적 링커가 실행 파일이있는 디렉토리와 동일한 디렉토리에서 dylib를 찾습니다. 이름을 설치
> for dylib in $DYLIBS; do install_name_tool -change $dylib @executable_path/`basename $dylib` ~/tmp/bin/convert; done;
확인이 변경되었습니다 및 libSystem 여전히 는/usr/lib 디렉토리/libSystem를 가리키고 있는지.
> otool -L ~/tmp/bin/convert
~/tmp/bin/convert:
@executable_path/libtiff.3.dylib (compatibility version 13.0.0, current version 13.5.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
@executable_path/libjpeg.8.dylib (compatibility version 12.0.0, current version 12.0.0)
@executable_path/libfontconfig.1.dylib (compatibility version 6.0.0, current version 6.4.0)
@executable_path/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
@executable_path/libfreetype.6.dylib (compatibility version 15.0.0, current version 15.0.0)
@executable_path/libexpat.1.dylib (compatibility version 7.0.0, current version 7.2.0)
@executable_path/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.6)
@executable_path/libz.1.dylib (compatibility version 1.0.0, current version 1.2.6)
...
절대 경로에 대한 링크가 포함될 수 있으므로 각 라이브러리 파일에도이 작업을 수행해야합니다. – Claudiu
- 1. Mac OS X에서 Qwt 사용
- 2. Mac OS X에서 virtualenv 사용
- 3. Mac OS X에서 사용할 라이브러리는 어떻게 정의합니까?
- 4. Mac OS X에서
- 5. Mac OS X에서 Qt와 함께 CGEvent 사용
- 6. Mac OS X에서 링커 스크립트 사용
- 7. Mac OS X에서 showkey equivalent?
- 8. libiconv.2.dylib Mac OS X 문제
- 9. Mac OS X에서 C++ Armadillo 라이브러리 설치
- 10. Mac OS X에서 libpng로 C 프로그램 컴파일
- 11. Mac OS X에서 업데이트 확인을 구현하는 방법
- 12. Mac OS X에서 파일 연결을 변경하는 방법
- 13. Mac OS X에서 Java의 미래
- 14. 피치 감지 Mac OS X에서
- 15. Mac OS X에서 HID_Utilities.h 누락
- 16. Mac OS X에서 어셈블리 편집
- 17. Mac OS X에서 내보내기 명령
- 18. Mac OS X에서 원격 디버깅
- 19. Mac OS X에서 Eclipse의 에뮬레이터
- 20. Mac OS X에서 GetTextExtentPoint32가 동일합니다
- 21. Mac OS X에서 PATH를 복원
- 22. Mac OS X에서 "실행하려면 클릭하십시오"
- 23. Mac OS X에서 Objective-C 및 C/C++ 결합
- 24. Mac OS X에서 웹 페이지 컨트롤
- 25. Mac OS X에서 OpenGL SOIL 컴파일
- 26. Mac OS X에서 교차 컴파일 x
- 27. Mac OS X에서 ZFS의 상태는 어떻습니까?
- 28. Mac OS X에서 현재 스택 추적 얻기
- 29. Mac OS X에서 모노는 충분히 빠릅니까?
- 30. Mac OS X에서 ASP.NET MVC 배우기
'otool -L 앱'을 사용하여 앱의 종속성을 확인하십시오. 절대 경로로 하드 코드 된 경우'install_name_tool -change old new file'을 사용하여 상대 경로가되도록 수정하십시오. 그런 다음 링커는'DYLD_LIBRARY_PATH' 환경 변수에서 라이브러리를 찾을 수 있습니다. – aponomarenko