2011-08-19 2 views
2

Xcode에서 dylib를 만들었습니다. installtion 디렉토리를 @rpath로 설정했습니다. 그런 다음이 dylib를 사용하고있는 테스트 프로젝트를 만들었습니다. 내가 그것을 실행할 때, 나는 dyld error를 얻는다 : 라이브러리가로드되지 않았다 .... 이유 : 이미지가 발견되지 않았다./usr/lib에있는 Xcode dylib

하지만 필자가 그 dylib를/usr/lib 폴더에 넣으면 매력처럼 작동합니다.

이 dylib를 컴파일 할 때 내 질문이 있습니다. 몇 가지 설정을 지정하여/usr/lib 디렉토리를 찾지 않고 단순히 어디에 있는지 찾아 봅니다. 감사!

답변

5

편집 :이 답변을 작성한 후에 질문을 다시 읽었습니다. 실행 파일이 아닌 dylib만을 생성하기 때문에 install_name_tool -id 명령을 사용해야합니다. 나는 그것이 당신이 그것을 찾은 것이라고 말할 수 있다고 믿지 않습니다. 나는 네가 그 길을 제시해야한다고 생각해. 이 예제에서는 응용 프로그램 번들의 프레임 워크 경로를 살펴 보는데, 이는 매우 합리적인 곳입니다.


응용 프로그램이 파일을 찾는 경로와 라이브러리가 찾길 원하는 경로를 모두 변경해야합니다. 여기에 세 개의 OpenCV 라이브러리를 사용하는 예제가 있습니다.

이 첫 줄은 응용 프로그램 번들의 프레임 워크 폴더에서 라이브러리를 찾도록 응용 프로그램에 지시합니다. ($BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH는 실행 파일을 지정하는 환경 변수의 조합입니다.)

#Fix references in executable 
install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib $BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH 
install_name_tool -change lib/libopencv_imgproc.2.3.dylib @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib $BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH 
install_name_tool -change lib/libopencv_highgui.2.3.dylib @executable_path/../Frameworks/libopencv_highgui.2.3.1.dylib $BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH 

나는 이전에 otool -L을 실행하여 첫 번째 매개 변수 ( lib/libopencv_core.2.3.dylib)를 얻었다.

$ otool -L libopencv_imgproc.2.3.1.dylib 
libopencv_imgproc.2.3.1.dylib: 
    lib/libopencv_imgproc.2.3.dylib (compatibility version 2.3.0, current version 2.3.1) 
    lib/libopencv_core.2.3.dylib (compatibility version 2.3.0, current version 2.3.1) 
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3) 
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11) 

이 다음 라인은 프레임 워크 폴더에 자신을 찾기 위해 라이브러리를 말한다.

#Fix install location in libraries 
install_name_tool -id @executable_path/../Frameworks/libopencv_core.2.3.1.dylib $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/libopencv_core.2.3.1.dylib 
install_name_tool -id @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/libopencv_imgproc.2.3.1.dylib 
install_name_tool -id @executable_path/../Frameworks/libopencv_highgui.2.3.1.dylib $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/libopencv_highgui.2.3.1.dylib 

그리고이 선은 프레임 워크 폴더에서 서로를 찾기 위해 도서관을 말한다.

#Fix references in libraries 
install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/libopencv_imgproc.2.3.1.dylib 
install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/libopencv_highgui.2.3.1.dylib 
install_name_tool -change lib/libopencv_imgproc.2.3.dylib @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib $BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/libopencv_highgui.2.3.1.dylib 

이 모든 것은 내 Xcode 프로젝트의 내 대상 스크립트 실행 단계에서 생성되었습니다.

+0

훌륭한 결과! .dylib 파일을 Frameworks 디렉토리에 복사하려면 "파일 복사"단계가 필요합니다. – Emiller

관련 문제