2011-02-26 1 views
3

내 Python 프로그램에서 호출되는 C++ 공유 라이브러리가 있습니다. C++ lib는 OS X에서 homebrew를 사용하여 설치 한 HDF5로 컴파일되어 있으므로 /usr/local/lib에 있습니다. 이제 문제는 또한 PyTables이 /Library/Frameworks/EPD64.framework/Versions/Current/...OS X 런타임 링커가 잘못된 라이브러리 버전을 찾음

내가 컴파일하고 내 라이브러리가 잘 연결할 수 있습니다 어딘가에 설치 libhdf5의 이전 버전을 포함하는 설치 및 otool -L/usr/local/lib/libhdf5.dylib를 가리키는 것입니다. 그러나 파이썬에서 실행하려고하면 버전 불일치 오류가 발생합니다. 어떻게 든 런타임 링커는 이전 hdf5 라이브러리를로드하고 있습니다.

한 가지 해결 방법은 정적 라이브러리로 hdf5를 작성하는 것입니다. 그러나 더 멋진 솔루션을 찾고 싶습니다. 어떻게하면 런타임 링커가 최신 라이브러리를 사용하도록 설득 할 수 있습니까? 나는 이미 DYLD_LIBRARY_PATH 설정을 시도했지만, 그저 모든 것을 망가 뜨 렸습니다 (파이썬과 MacVim은 시작되지 않습니다).

+0

은 내가 MEX-파일을 matlab에 동일한 문제가 있습니다. 내가 재활용 할 수있는 해결책을 찾길 바랍니다! – Simon

답변

0

정보를 더 제공 할 수 있습니까? 몇 가지 대안 (및 질문)이 있습니다.

제대로 이해했다면 lib_ver_a.dyld를 사용하는 라이브러리와 lib_ver_b.dyld를 사용하는 pyTables를 사용할 수 있습니다. 나는. 같은 라이브러리이지만 다른 버전.

당신은 수 중 하나 DYLD_LIBRARY_PATH =/정확/경로/lib 디렉토리 :

  1. 는 (컴파일 동안 ... DYLD_LIB) pyTables과 동일한 버전을 사용하고 pyTables 라이브러리 프로그램을 실행하기 위해 라이브러리를 컴파일 python myprog.py

  2. xcode를 업그레이드하십시오 (사용중인 버전은 osx 버전입니까?). 이것은 당신의 라이브러리와 pyTables가 업그레이드 당신은 또한 (사용자 정의 하나 사과 하나)를 호출하는 파이썬있는 확인해야

(주의, 최신 가장 안정적 필요가 없습니다).

GCC /path/lib1.dyld myLib.c -o : 연결하는 동안 특정 dyld을 정의 할 가능성도 있습니다

(? 당신은 내가 여기에 몇 가지 옵션을 놓칠 수 연결에 대한 GCC 또는 LD를 사용하십니까) myLib.o

이 방법을 사용하면 라이브러리가 특정 버전의 라이브러리에 연결됩니다 (주의! 정확한 세부 정보는 기억이 나지 않지만 자세히 조사 할 수 있음).

이 정보가 도움이되기를 바랍니다.

BR,

주하

+0

지금 일하고있는 것 같습니다. 무엇이 바뀌 었는지 잘 모르겠습니다. XCode를 업그레이드 할 필요가 없었으며 DYLD_LIBRARY_PATH를 설정하면 자체 문제가 발생하므로이 파일을 마법의 요정 먼지로 분필 할 것입니다. 어쨌든 고마워. – krashalot