2010-03-21 3 views
7

공유 라이브러리를 현재 '.' osx의 단위 테스트에서 리눅스와 NetBSD의 작동 무엇osx에서 python load dylib를 만드는 방법

은에

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH 

를 추가

하지만 OSX에 _mymodule.so --> ../.libs/libmymodule.so는, 파이썬의 import mymodule 내가 해봤

_mymodule.dylib --> ../.libs/libmymodule.dylib 

찾을 수 없습니다 심볼릭 링크가 script env, nogo. 어떤 도움을 주셔서 감사합니다.

-Ed

갱신 4/6/10는 :

아래 krunk의 정보와 해결. 그러나 dylib를 .so라는 이름으로 복사하거나 ln-s'ing해도 완전히 그것을 해결하지 못했습니다. 여전히로드되지 않습니다. 그러나 libtool에 lib를 -module 플래그와 연결하도록 지시하면로드 할 .so lib가 생성됩니다. 파이썬 버전의 lib가 이제 작동합니다.

이제 perl 라이브러리를 사용할 수 있습니다. 저는 swig perl, python, ruby, lua libs를 만들고 있습니다.이 픽스는 오직 python과 lua 만 가지고 있습니다.

답변

12

OS X에서도 * .so를 모듈 확장으로 사용하십시오. 나는 .dylib를로드 할 수 없다는 모호한 기억을 가지고 있으며 파이썬 자체에서 문제가되고있다. . . 하지만 지금 메일 링리스트 게시물을 찾을 수 없습니다.

그러나 OS X에서도 * .so를 사용하여 표준 실행을 따르고 있으므로 안심하십시오. 전체 프레임 워크에서 유일한 * .dylib는 libsvn_swig입니다.

find /System/Library/Frameworks/Python.framework/Versions/2.6/ -name "*.so" 

/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/X11/xcb/xcb.0.0.0.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/X11/xcb/xcb.0.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/X11/xcb/xcb.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/CoreGraphics/_CoreGraphics.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/OpenSSL/SSL.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/OpenSSL/crypto.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/OpenSSL/rand.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_appmain.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_carbon.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_inlines.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_nsbezierpath.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_nsbitmap.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_nsfont.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_nsquickdrawview.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_nsview.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/AppKit/_nswindow.so 
/System/Library/Frameworks/Python.framework/Versions/2.6//Extras/lib/python/PyObjC/CFNetwork/_manual.so 
+0

감사합니다! 당신의 대답은이 도랑에서 나를 빠져 나갔고, 올바른 길로 나아갔습니다. – navicore

+2

OS X에서 정적 라이브러리를 사용하지 마십시오. 정적 라이브러리에 특별히 링크를 지정해도 OSX는 정적 라이브러리보다 동적 라이브러리를 가능한 항상 링크합니다 (가능하면 가능하지 않습니다). 예 : /path/to/libfoo.a에 링크하고 libfoo.dylib 또는 libfoo.so가 경로의 아무 곳에 나 있으면 링커에서 두 테이블에 다른 테이블이 있으면 매우 흥미있는 런타임 정의되지 않은 심볼 오류로 이어지는 요청을 겉으로는 무시할 것입니다. – jkyle

관련 문제