2011-09-20 21 views
5

Tôi đang cố gắng xây dựng một phần mở rộng python DLL trên máy 64 bit Win7 bằng cách sử dụng Cygwin (như Cygwin chỉ chạy dưới dạng quá trình 32 bit, đây thực sự là biên dịch chéo).Xây dựng 64bit libpython27.a bằng cách sử dụng cygwin, dlltool

Tôi tạo ra libpython27.a bản thân mình từ python27.dll sử dụng dlltool (như đã giải thích, ví dụ, here), nhưng việc xây dựng thất bại trong giai đoạn mối liên kết nói
skipping incompatible c:\Python27\libs/libpython27.a when searching for -lpython27
Đây chính là lỗi báo cáo here (nơi anh ta đã chuyển sang trình biên dịch MSVC ...). Thông tin

thêm:
- Active Python 2.7.2, win64, x64
- phiên bản mới nhất của Cygwin, sử dụng trình biên dịch /usr/bin/x86_64-w64-mingw32-g++.exe

Liệu bất cứ ai biết nếu điều này được hỗ trợ?
Có cách nào để sử dụng dlltool mà tôi bỏ lỡ ở đây không?

(tôi đã tìm thấy here hướng dẫn sử dụng
dlltool --as-flags=--64 -m i386:x86-64 -k -l libpython27.a -d python.def
nhưng khi làm như vậy tôi đã "invalid bfd target" lỗi từ dlltool)

Cảm ơn!

Cập nhật: Tôi tin rằng nó có thể được thực hiện vì Enthought python chứa tệp như vậy. Tôi muốn tạo một bản cho các bản phân phối phổ biến hơn không chứa nó.

+0

Vâng, nếu chúng tôi biết về cờ, nó sẽ không phải là _secret_ bây giờ phải không? – brc

Trả lời

0

Tôi không chắc chắn như thế nào hữu ích bạn tìm thấy điều này, nhưng ở dưới cùng của trang, bạn có liên quan đến có một liên kết đến here - Trường hợp nó nói:

Không sử dụng MinGW-w64. Như bạn sẽ thấy, thư viện nhập MinGW cho Python (ví dụ: libpython27.a) được bỏ qua từ phiên bản AMD64 của Python. Đây là cố ý. Đừng cố gắng thực hiện một bằng cách sử dụng dlltool. Chưa có bản phát hành MinGW-w64 chính thức nào, nó vẫn ở dạng "beta" và được coi là không ổn định, mặc dù bạn có thể nhận được bản dựng 64 bit từ ví dụ: TDM-GCC. Cũng có các vấn đề với thời gian chạy mớ hỗn độn xung đột với thời gian chạy MSVC; điều này có thể xảy ra từ những nơi bạn không mong đợi, chẳng hạn như bên trong thư viện thời gian chạy cho g ++ hoặc gfortran. Để giữ an toàn, hãy tránh MinGW-w64 ngay bây giờ.

+0

Có, tôi đã nhìn thấy nó, không chắc chắn dữ liệu này đáng tin cậy như thế nào. Ví dụ, trong Enthought python libpython27.a không được bỏ qua ngay cả trong phiên bản AMD64. –

1

Vấn đề là bạn đang sử dụng dlltool 32 bit. Có lẽ trong C: \ MinGW \ bin thay vì C: \ MinGW64 \ bin. Bạn có thể thay đổi đường dẫn của mình hoặc chạy công cụ 64 bit cụ thể như vậy:

C:\MinGW64\bin\dlltool -v --dllname python27.dll --def python27.def --output-lib libpython27.a 
Các vấn đề liên quan