2010-04-11 1 views
11

Mac OS X 10.6 SDK를 사용하고 있으며 배포 대상이 Mac OS 10.5로 설정되어 있습니다. libcrypto (AquaticPrime이 필요합니다)에 연결하고있어 내 응용 프로그램이 Leopard에서 실행되지 않는다는 것을 알았습니다. 오류가Leopard 용 libcrypto에 연결 하시겠습니까?

dyld: Library not loaded: /usr/lib/libcrypto.0.9.8.dylib

I는 다음과 같은 대안을 시도했습니다

하지만 그들 중 누구도 작동하지 :

  • libcrypto.0.9.7.dylib에 직접 연결 (10.6 SDK는 libcrypto.0.9.7.dylib와 직접 연결을 거부
  • 복사합니다. 012 디렉토리에 1037 SDK의 버전을 10.6 lib 디렉토리에 넣으십시오. 이번에는 링크 프로세스가 성공했지만 Leopard에서는 아직 존재하지 않는 libcrypto.0.9.8.dylib 파일을 찾아서 실행하지 않습니다.
  • Mac OS X 10.5.8 설치에서 libcrypto.0.9.7.dylib을 복사하여 링크했습니다 (링크는 성공적 이었지만 앱은 여전히 ​​libcrypto.0.9.8.dylib을 찾습니다).

이 라이브러리에 링크하고 여전히 10.6 SDK를 사용할 수 있습니까?

감사합니다.

+0

당신이 얼마나 설명 라이브러리에 연결. 나는 이것을 잘 사용하고 있습니다. 다른 것들도 그렇습니다. 그래서 여러분의 설치가 잘못되었거나 잘못 연결되어 있습니다. –

답변

1

대상 빌드 설정에서 기본 SDK를 10.5로 설정할 수 있습니다.

+0

예 ..이 사람이 일했습니다. 기본 SDK를 10.5로 설정했지만 활성 SDK를 10.6으로 설정했습니다. 이렇게하면 10.6 개의 소스 코드 (예 : 10.6 프로토콜을 구현하는 소스 코드)가 있고 여전히 10.5에서 앱을 실행할 수 있습니다. 감사합니다. – adib

+0

Xcode 3.2.3에서 "Active SDK"옵션이 제거되었으므로이 문제를 해결하려면 어떻게해야합니까? – adib

+0

옵션이 약간 제한되었습니다. 10.6 SDK에 libCrypto 버전이 10.5에 포함 된 버전과 호환되지 않기 때문에 문제가 발생합니다. 기본 SDK를 10.5로 설정하면 사용할 최대 SDK 버전임을 알 수 있습니다. 기술적으로, 당신은 헤더를 10.6 개 사용해서는 안됩니다. – JeremyP

0

특정 버전 대신 libcrypto.0.9.dylib 또는 libcrypto.dylib에 대한 링크를 시도 했습니까?

+0

예. -'libcrypto.0.9.dylib '에 링크하면 링커 오류 - libcrypto.dylib 링크가 연결되고 빌드가 잘되지만 응용 프로그램이 Leopard에서 실행되지 않습니다. – adib

22

여기 스레드 (첫 번째 스레드에서 게시물 : "스노우 레오파드 (Snow Leopard)에 libcrypto"http://lists.apple.com/archives/cocoa-dev/2009/Aug/msg01737.html, 스레드 목록 : http://lists.apple.com/archives/cocoa-dev/2009/Aug/thrd19.html)에 따라 경찰 :

  1. 이동/개발자에, 나는 솔루션은 다음을 수행하는 것입니다 생각 /SDKs/MacOSX10.5.sdk/usr/lib/. 이 폴더에서 프로젝트 소스 폴더에 "libcrypto.0.9.7.dylib"를 복사하십시오.

  2. 방금 ​​복사 한 파일의 이름을 "libmycrypto.dylib"로 변경하십시오.

  3. 방금 ​​이름을 바꾼 파일을 프로젝트에 추가하십시오. 프로젝트에서 다른 링크 된 libcrypto 프레임 워크를 제거하십시오.

  4. 빌드 설정을 수행하고 "-lcrypto"링커 플래그를 제거하십시오. (이것은 보통. "기타 링커 플래그"설정에 넣어 것) 이제

당신이 당신의 프로젝트를 빌드 할 수 있어야하며 10.5과 10.6에서 모두 작동합니다.

(libcrypto.0.9.7은 10.5와 10.6에서 모두 사용할 수 있습니다. 복사 한 파일은 헤더의 스텁 일 뿐이므로 이 아닌이 프로젝트에 임베드되어 있습니다. 링커는 dylib의 실제 파일 이름이 아닌 설치 경로를 사용합니다. "libmycrypto.dylib"로 경로 충돌을 제거하지만 필요한 라이브러리에 연결할 수 있습니다. /usr/lib/libcrypto.dylib (심볼릭 링크)에 링크 할 수 있어야하며 10.5와 10.6 모두에서 올바른 버전의 libcrypto를 대상으로 삼아야합니다. 그러나 Xcode는 빌드 할 때 항상 0.9.8 버전과 연결되는 것으로 보입니다 스노우 레오파드.)

+0

위대한 답변, 내가 뭘 찾고 있었는지. 건배. –

+1

10.6 이상에서 앱을 빌드하고 10.5에서 실행하려는 경우 위의 체크리스트가 아닌 사용해야하는 답변입니다. 또한 : lcrypto 링커 플래그를 찾을 때 해당 플래그를 사용할 수 있음을 기억하십시오. 프로젝트 레벨 설정과 개별 대상 모두에서 모두 제거해야합니다. – chockenberry

+0

아마도 ObjectiveC에서는 작동하지만 C++/gcc에서는 작동하지 않을 수 있습니다. -isysroot 옵션을 통해 10.5 SDK 만 사용하면 0.9.7 버전의 libssl/libcrypto에 연결할 수 있습니다. 0.9.7의 H 파일을 사용하여 컴파일 할 때 해당 dylib에 연결할 필요가 없습니다. 또한 10.5 SDK를 사용하여 10.7/10.8을 빌드 할 때 10.5 SDK의 STL 헤더가 깊게 들어있는 경우 i686-apple-darwin10과 같은 심볼릭 링크가 i686-apple-darwin9를 가리 킵니다. darwin11 및 darwin12 (i686 및 x86_64 모두)에 대해 이러한 심볼릭 링크를 만들어야합니다. 정확히 말하면, 심볼릭 링크가있는 디렉토리는 /MacOSX10.5.sdk/usr/include/c++/4.2.1입니다. –

1

lib를 사용하는 대상에 따라 libcrypto를 10.5 및 10.6 모두에서 잘 작동하는 CommonCrypto로 대체 할 수 있습니다. 필자는 MD5 기능에만 libcrypto를 사용 했으므로 openssl/md5.h를 CommonCrypto/CommonDigest.h로 바꾸고 MD5()를 CC_MD5()로 libcrypto를 CommonCrypto로 바꿨습니다. 이제는 Leopards 모두에서 작동합니다.

0

Leopard OS X에는 ppc 아키텍처 만있는 libcrypto 및 libssl이 함께 제공됩니다.

응용 프로그램의 코드를 변경하지 않아도되는 간단한 솔루션은 libcrypto.0.9.dylib, libcrypto.0.9.8.dylib, libssl0.9.dylib, libssl.0.9.8.dylib 및 libcrypto.0.9.7.dylib 및 libssl.0.9.7.dylib를 복사하십시오.

당신은 당신의 응용 프로그램 폴더에 이러한 변경을 Terminal.app를 사용할 수 있습니다

cd /usr/lib 
    sudo cp libcrypto.0.9.dylib libcrypto.0.9.dylib.old 
    sudo cp libssl.0.9.dylib libssl.0.9.dylib.old 
    sudo ln -sf libcrypto.0.9.7.dylib libcrypto.0.9.dylib 
    sudo ln -sf libssl.0.9.7.dylib libssl.0.9.dylib 

여기에 신선한하려면 openssl 버전에 머물 수 있도록하는 대안 솔루션입니다 :

1. reactivate the current openssl: port activate [email protected]_0 (or whatever) 
    2. clean up your old unwanted versions of everything: port uninstall inactive 
    3. uninstall badly behaved ports: port uninstall md5sha1sum subversion neon 
    4. get them back: port install subversion md5sha1sum 
관련 문제