2010-03-21 9 views
7

Cố gắng tải một lib được chia sẻ ra khỏi hiện tại '.' dir trong một bài kiểm tra đơn vị trên osx.làm thế nào để làm cho python tải dylib trên osx

gì hoạt động trên Linux và NetBSD có một liên kết tượng trưng _mymodule.so --> ../.libs/libmymodule.so

nhưng trên OSX, python của import mymodule sẽ không tìm thấy

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

Tôi đã thử thêm

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH 

đến kịch bản env, nogo. Bất kỳ trợ giúp nào được đánh giá cao.

-ed

cập nhật 4/6/10:

giải quyết với các thông tin từ cho Miễn phí dưới đây. Nhưng chỉ cần sao chép hoặc ln -s'ing dylib vào một tên .so đã không giải quyết nó hoàn toàn. Vẫn không tải được. Nhưng nói với libtool để liên kết lib với cờ -module tạo ra một .so lib mà sẽ tải. Phiên bản Python của lib hoạt động ngay bây giờ.

Bây giờ, nếu tôi chỉ có thể nhận được lib hoạt động. Tôi đang xây dựng perl swig, python, ruby, và lib lib và sửa chữa này chỉ có python và lua làm việc.

Trả lời

12

Chỉ cần sử dụng * .so làm phần mở rộng mô-đun của bạn trong OS X. Tôi có một bộ nhớ mơ hồ về việc không thể tải .dylib và nó trở thành một vấn đề với python. . . nhưng tôi không thể tìm thấy bài đăng danh sách gửi thư ngay bây giờ.

Tuy nhiên, hãy yên tâm rằng bạn đang theo dõi thực hành tiêu chuẩn bằng cách sử dụng * .so ngay cả trên OS X. Chỉ * .dylib trong toàn bộ khung là 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

cảm ơn! câu trả lời của bạn đưa tôi ra khỏi mương này, đưa tôi xuống con đường đi đúng hướng. – navicore

+2

Cũng giống như một phòng ngừa, không bao giờ sử dụng libs tĩnh trong OS X. Chúng "không được chấp nhận" và OSX sẽ _always_ liên kết các thư viện động trên các thư viện tĩnh khi có thể ngay cả khi bạn liên kết cụ thể đến một thư viện tĩnh. ví dụ: nếu bạn liên kết đến /path/to/libfoo.a và libfoo.dylib hoặc libfoo.so tồn tại ở bất kỳ đâu trên đường dẫn, trình liên kết sẽ bỏ qua yêu cầu của bạn dẫn đến một số lỗi biểu tượng thời gian chạy rất thú vị nếu hai bảng có các bảng khác nhau. – jkyle