2011-09-20 8 views
5

का उपयोग कर 64 बिट libpython27.a बिल्डिंग मैं साइगविन का उपयोग कर 64 बिट विन 7 मशीन पर एक पाइथन एक्सटेंशन डीएलएल बनाने की कोशिश कर रहा हूं (क्योंकि सिग्विन केवल 32 बिट प्रक्रिया के रूप में चलाया जाता है, यह वास्तव में क्रॉस-कंपाइलिंग है)।सिग्विन, dlltool

मैं dlltool का उपयोग कर (जैसा कि बताया गया है, उदाहरण के लिए, here) python27.dll से अपने आप को libpython27.a बनाया है, लेकिन निर्माण कह
skipping incompatible c:\Python27\libs/libpython27.a when searching for -lpython27
यह ठीक है त्रुटि here सूचना दी लिंकर चरण के दौरान असफल (जहां आदमी एमएसवीसी संकलक के लिए आगे बढ़ गया ...)।

और जानकारी:
- सक्रिय पायथन 2.7.2, win64, 64
- cygwin के नवीनतम संस्करण, /usr/bin/x86_64-w64-mingw32-g++.exe संकलक

करता है का उपयोग करते हुए किसी को पता है कि यह समर्थित है या नहीं?
क्या मुझे यहां याद आती है dlltool का उपयोग करने का कोई तरीका है?

(मैं here मार्गदर्शन पाया था
dlltool --as-flags=--64 -m i386:x86-64 -k -l libpython27.a -d python.def
उपयोग करने के लिए, लेकिन जब ऐसा करने से मैं dlltool से "invalid bfd target" त्रुटि मिली)

धन्यवाद!

अद्यतन: मुझे विश्वास है कि यह किया जा सकता है क्योंकि Enthought python ऐसी फ़ाइल है। मैं अधिक आम वितरण के लिए एक बनाना चाहता हूं जिसमें इसे शामिल नहीं किया गया है।

+0

ठीक है अगर हम ध्वज के बारे में जानते थे, तो यह अब _secret_ नहीं होगा? – brc

उत्तर

0

मुझे यकीन है कि कितने उपयोगी आप इस लगता है नहीं कर रहा हूँ, लेकिन पृष्ठ के तल पर आप लिंक किए गए वहाँ here का लिंक है करने के लिए - यह कहाँ का कहना है:

MinGW-W64 उपयोग न करें। आप देखेंगे के रूप में, अजगर (जैसे libpython27.a) के लिए MinGW आयात पुस्तकालय अजगर की AMD64 संस्करण से छोड़ा गया है। यह जानबूझकर है। dlltool का उपयोग कर एक बनाने की कोशिश मत करो। वहाँ कोई आधिकारिक MinGW-W64 रिहाई अभी तक है यह, "बीटा" और अस्थिर माना में अब भी है, हालांकि आप एक 64-बिट उदा से निर्माण प्राप्त कर सकते हैं टीडीएम-जीसीसी। एमएसवीसी रनटाइम के साथ विवादित मिंगव रनटाइम के साथ भी समस्याएं आई हैं; यह उन स्थानों से हो सकता है जहां आप अपेक्षा नहीं करते हैं, जैसे g ++ या gfortran के लिए रनटाइम लाइब्रेरीज़ के अंदर। सुरक्षित पक्ष पर मनाने के लिए, अभी MinGW-W64 से बचें।

+0

हां, मैंने इसे देखा है, यह सुनिश्चित नहीं है कि यह डेटा कितना विश्वसनीय है। उदाहरण के लिए, Enthought अजगर libpython27.a में भी AMD64 संस्करण में छोड़े गए नहीं है। –

1

समस्या यह है कि आप 32 बिट dlltool का उपयोग कर रहे हैं। शायद सी: \ MinGW \ bin के बजाय \ MinGW \ bin में C: \ MinGW64 \ bin। आप अपना रास्ता बदल सकते हैं, या विशेष रूप से 64 बिट टूल को चला सकते हैं:

C:\MinGW64\bin\dlltool -v --dllname python27.dll --def python27.def --output-lib libpython27.a 
संबंधित मुद्दे