2013-10-09 3 views
1

이제이 동적 라이브러리를 사용하는 동적 라이브러리 및 명령 줄 일러스트 프로그램을 구축 중입니다.Mac에서 동적 라이브러리 경로 오류가 발생했습니다.

/user/xxx/develop/debug/libdynamic.dylib 
/user/xxx/develop/debug/illustration 

그림 프로그램이 내 컴퓨터에서 잘 작동 할 수, 내 동료에게 동적 라이브러리뿐만 아니라 그림 프로그램을 보내고 그는를 실행합니다 : 라이브러리와 그림 프로그램은 같은 폴더에 그의 컴퓨터에서 그림 프로그램입니다. 그러나 명령 창에서 일러스트레이션 프로그램을 실행할 때마다 프로그램은 libdynamic.dylib을로드 할 수 없으므로 내 동료 컴퓨터에서 사용할 수없는의 라이브러리를 찾으려고합니다. 내가 뭘해야하는지 궁금해서. 많은 감사합니다.

편집 : 다음 그림 프로그램 otool 사용하여 출력이 될 때 :

/Users/xxx/develop/debug/libdynamic.dylib (compatibility version 0.0.0, current version 0.0.0) 

    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.18.0) 

    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0) 
+0

죄송합니다.'dylib '가 어디에 있는지 생각해보기 위해'otool -L/user/xxx/develop/debug/illustration'이 필요합니다. – trojanfoe

답변

1

당신은 어디 install_name_tool (manpage)를 사용하여 빌드 후 작업을 수행 할 수 있습니다 libdynamic.dylib을 찾을 수 illustration 말할 필요가있다. 판단 할 수있는, 그것은 현재로 설정 있는지에 따라 달라집니다 install_name_tool에 전달

$ install_name_tool -change /user/xxx/develop/debug/libdynamic.dylib \ 
    @executable_path/libdynamic.dylib \ 
    /user/xxx/develop/debug/illustration 

(정확한 이전 이름 ​​ 값 : 당신은 (같은)로, @executable_path/libdynamic.dylib에 새 경로를 설정할 수 있습니다 otool -L /user/xxx/develop/debug/illustration 사용).

$(BINDIR)/libdynamic.dylib: $(OBJS) 
    $(CXX) -dynamiclib -current_version $(MAJOR_MINOR_VERSION) \ 
     -compatibility_version $(MAJOR_MINOR_VERSION) \ 
     -install_name @executable_path/libdynamic.dylib \ 
     $(LDFLAGS) -o [email protected] $(OBJS) $(LIBS) 

(here에서 촬영 Makefile 조각) :이 말도 (그리고 나 자신을 그것을 할 방법)을 방지하기

한 가지 방법은 -install_name 링커 옵션을 사용하는 것입니다.

관련 문제