2014-02-11 3 views
0

일부 Apple 프레임 워크에 링크되는 Xcode로 빌드 한 명령 행 도구가 있습니다.Mac OS X - 실행 파일을 다른 동적 라이브러리에 연결하여 이전 버전과 새로운 버전을 모두로드하십시오.

"개인적인 실험"(그냥 동적 라이브러리가 어떻게 작동하는지 조금 이해하려고 노력함)은 동일한 프레임 워크의 다른 버전으로 실행 파일을 지정하려고했습니다.

는 이제 실행 EXECLIB_A를 사용하고, 후자는 LIB_B의 사용을 만드는 예를 들어 가정 해 봅시다.

내가 LIB_A하고 다른 (짧은) 디렉토리 경로에서 그들을 배치 LIB_B 모두의 사본을했습니다.

나는 otool -L을 사용하여 라이브러리의 종속성과 ID를 가져 왔습니다.

나는 다음 (변경되지 않았다 기본적으로 그냥 이름으로 선도적 인 경로를 변경) 새로운 LIB_ALIB_B의 ID를 변경하도록 지시 -idinstall_name_tool을 사용했다.

그런 다음 지시어 -change와 나는 새로운 LIB_A 새로운 LIB_B를 가리 키도록하고 실행 EXEC 새로운 LIB_A를 가리도록하자.

이 방법은 전체 종속성 트리를 올바르게 다시 만들어야한다고 생각했습니다.


install_name_toolotool 올바른 경로에 그들은 모두 포인트 오류와 실행 파일을 검사하고 새로운 라이브러리를 반환하지 않았다.

불행히도 실행 파일을 실행하면 EXEC 클래스의 중복 정의와 관련하여 콘솔에 많은 오류가 발생합니다. 오래된 라이브러리와 새로운 라이브러리가 모두로드 된 것과 같습니다.

추적/BPT 트랩에 마지막으로 모든 충돌 : 예를 들어 5

:

objc[25992]: Class NSAppleEventManager is implemented in both 
      /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation and 
      /xyz/Foundation. 
      One of the two will be used. Which one is undefined. 

내가 실제로 라이브러리를 두 번로드되는 실행에 볼

export DYLD_PRINT_LIBRARIES=1 

를 호출하면 .

답변

0

는 사실은 잔인하게 내 특정 상황에 근무

export DYLD_LIBRARY_PATH= 

를 설정하여 문제를 해결했다.