2012-12-13 33 views
12

विंडोज पीसी पर MinGW32 का उपयोग करके मैं pySpotify संकलित करने की कोशिश कर रहा हूं। पहली त्रुटि यह थी कि libspotify/api.h गुम था। से उचित फ़ोल्डर को C:\MinGW\include में उचित फ़ोल्डर की प्रतिलिपि बनाकर तय किया गया है। हालांकि अब dllwrap अब ld linking. साथ विफल हो रहा है बाइनरी Spotify वितरित करते हैं libspotify.dll और libspotify.lib. कोई फर्क नहीं पड़ता है जहाँ मैं उन्हें (pySpotify फ़ोल्डर/उप-फ़ोल्डर, अस्थायी निर्माण फोल्डर/सबफ़ोल्डर और MinGW फ़ोल्डर/उप-फ़ोल्डरों) या मैं उन्हें क्या नाम (ए डाल , .o & .so) यह अभी भी वही त्रुटि संदेश दिखाता है।मिनीजीडब्ल्यू 32 संकलन में libspotify .dll/.lib फ़ाइलों का उपयोग pySpotify

उचित त्रुटि है:

C:\MinGW\bin\dllwrap.exe -mdll -static --output-lib build\temp.win32-2.7\Release\src\lib_spotify.a --def build\temp.win32-2.7\Release\src\_spotify.def -s build\temp.win32-2.7\Release\src\module.o build\temp.win32-2.7\Release\src\session.o build\temp.win32-2.7\Release\src\link.o build\temp.win32-2.7\Release\src\track.obuild\temp.win32-2.7\Release\src\album.o build\temp.win32-2.7\Release\src\albumbrowser.o build\temp.win32-2.7\Release\src\artist.o build\temp.win32-2.7\Release\src\artistbrowser.o build\temp.win32-2.7\Release\src\search.o build\temp.win32-2.7\Release\src\playlist.o build\temp.win32-2.7\Release\src\playlistcontainer.o build\temp.win32-2.7\Release\src\playlistfolder.o build\temp.win32-2.7\Release\src\image.o build\temp.win32-2.7\Release\src\user.o build\temp.win32-2.7\Release\src\pyspotify.o build\temp.win32-2.7\Release\src\toplistbrowser.o -LC:\Python26\libs -LC:\Python26\PCbuild -lspotify -lpython26 -lmsvcr90 -o build\lib.win32-2.7\spotify\_spotify.pyd 
c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: cannot find -lspotify 
collect2.exe: error: ld returned 1 exit status 
dllwrap: gcc exited with status 1 
error: command 'dllwrap' failed with exit status 1 

bok says on github कि:

आप (मैं ~ \ libspotify की तरह कुछ जोड़ने \ करने के लिए शामिल हैं रास्ते में एपीआई हेडर जोड़ने की जरूरत है अपने कंपाइलर विकल्प) और लाइब्रेरी पथ में साझा लाइब्रेरी (ऐड-एल ~ \ libspotify \ lib आपके लिंकर विकल्पों में)। यह आवश्यक बाइनरी ऑब्जेक्ट्स को खोजने के लिए संकलक को जरूरी फाइलों और आपके लिंकर को ढूंढने की अनुमति देगा।

हालांकि distutils एक्सटेंशन वर्ग पदावनत और कड़ी किए जाने के लिए दस्तावेज़ प्राप्त करने के (मेरा मानना ​​है कि यह वह जगह है जहाँ कस्टम संकलक विकल्पों जाने की जरूरत है) लगता है। प्रशंसा करें कि ~ को बदलकर %USERPROFILE% या इसी तरह की आवश्यकता हो सकती है। इसी प्रकार %PYTHONPATH%\Lib\distutils\distutils.cfg में [build]compiler=mingw32 स्टांजा से थोड़ा कम दस्तावेज है। यह संकलन/लिंक कमांड को संपादित करता है और उनके विकल्पों को बदलने के लिए असंभव है।

आप विंडोज़ पर pySpotify कैसे संकलित करते हैं?

संपादित करें:

अजगर 2.6 और नकल libspotify.dll/सी के लिए libspotify.lib का उपयोग करके: \ Python26 \ PCbuild और उन्हें नाम बदलने spotify.dll को/libspotify.lib मैं अब एक और त्रुटि संदेश मिलता है एलडी से:

C:\MinGW\bin\dllwrap.exe -mdll -static --output-lib build\temp.win32-2.6\Release\src\lib_spotify.a --def build\temp.win32-2.6\Release\src\_spotify.def -s build\temp.win32-2.6\Release\src\module.o build\temp.win32-2.6\Release\src\session.o build\temp.win32-2.6\Release\src\link.o build\temp.win32-2.6\Release\src\track.obuild\temp.win32-2.6\Release\src\album.o build\temp.win32-2.6\Release\src\albumbrowser.o build\temp.win32-2.6\Release\src\artist.o build\temp.win32-2.6\Release\src\artistbrowser.o build\temp.win32-2.6\Release\src\search.o build\temp.win32-2.6\Release\src\playlist.o build\temp.win32-2.6\Release\src\playlistcontainer.o build\temp.win32-2.6\Release\src\playlistfolder.o build\temp.win32-2.6\Release\src\image.o build\temp.win32-2.6\Release\src\user.o build\temp.win32-2.6\Release\src\pyspotify.o build\temp.win32-2.6\Release\src\toplistbrowser.o -LC:\Python26\libs -LC:\Python26\PCbuild -lspotify -lpython26 -lmsvcr90 -o build\lib.win32-2.6\spotify\_spotify.pyd 
_spotify.exp: file not recognized: File format not recognized 
collect2.exe: error: ld returned 1 exit status 
dllwrap: gcc exited with status 1 
error: command 'dllwrap' failed with exit status 1 
+0

शायद निरपेक्ष पथ MinGW के ld द्वारा सही ढंग से पढ़ा नहीं है? यही है, libspotify को एक सापेक्ष स्थान पर ले जाने का प्रयास करें और देखें कि क्या इससे मदद नहीं मिलती है। –

+0

हाय निक, सुझाव के लिए धन्यवाद - लेकिन मैंने प्रत्येक फ़ोल्डर/उपफोल्डर को कॉपी करने का प्रयास किया है, मुझे कोई फायदा नहीं हुआ: "कोई फर्क नहीं पड़ता कि मैंने उन्हें कहां रखा है (pySpotify फ़ोल्डर/उपफोल्डर्स, अस्थायी फ़ोल्डर/उपफोल्डर्स और मिनीजीडब्ल्यू फ़ोल्डर/उपफोल्डर्स)। " – Metalshark

उत्तर

1

इस समय एक मिंगव स्थापना तक पहुंच नहीं है, मैं कुछ चीजों का सुझाव दे सकता हूं।

पहला, ld तर्कों के क्रम के बारे में picky के रूप में जाना जाता है। आश्चर्यजनक रूप से, जब मैंने "एलडी तर्क आदेश" के लिए गुगल किया, तो मुझे पृष्ठों का एक समूह मिला जो सुझाव देता है कि आदेश कोई फर्क नहीं पड़ता, लेकिन मुझे इसके द्वारा कई बार जला दिया गया है। मैं निम्नलिखित तर्क आदेश के साथ सबसे ज्यादा सफलता मिली है:

    ld करने के लिए
  1. स्विच (यानी, -Wall)
  2. लाइब्रेरी खोज पथ (यानी, -LPATH)
  3. वस्तु फ़ाइलों
  4. पुस्तकालय (यानी, -lspotify)

मैंने आपके लिंकर आउटपुट में amd64 के कुछ संदर्भों में देखा।मुझे यकीन नहीं है कि आपने अपनी अन्य ऑब्जेक्ट फ़ाइलों को कैसे संकलित किया है, लेकिन चूंकि libspotify विंडोज पर 32-बिट है, इसलिए मुझे लगता है कि यहां 32/64 बिट मिश्रण करना बहुत अच्छा काम नहीं करेगा।

आखिरी बात यह है कि मैं सोच सकता हूं कि शायद डीएलएल एक्सटेंशन ld पर भ्रमित हो रहा है, क्या आपने फ़ाइल नाम को libspotify.so पर बदलने का प्रयास किया है? मुझे पता है कि यह अंधेरे में एक शॉट है, लेकिन अन्यथा मुझे यकीन नहीं है कि आगे आपकी मदद कैसे करें।

+0

मैंने दोनों फाइलों को .so, .a और .o पर नाम बदलने का प्रयास किया है। जब मैंने MinGW64 का उपयोग करने का प्रयास किया तो शिकायत की गई कि यह संकलित नहीं हो सका, इसलिए अब मैं मिनीजीडब्ल्यू (64-बिट विंडोज़ पर) का उपयोग कर रहा हूं। निर्माण स्क्रिप्ट के साथ मुझे तर्क आदेश का कोई उपयोग नहीं है जो समस्या का हिस्सा है। – Metalshark

1

मुझे लगता है कि आप libspotify के 32 बिट संस्करण के खिलाफ pyspotify के 64 बिट संस्करण को जोड़ने का प्रयास कर रहे हैं। CpLAGS और CXXFLAGS

+0

मुझे नहीं पता कि setup.py (pySpotify के लिए बिल्ड स्क्रिप्ट) के साथ CFLAG/CXXFLAGS तक कैसे पहुंचे। – Metalshark

+0

CFLAGS = -m32 पायथन setup.py चाल चलाना चाहिए। यह भी सुनिश्चित करें कि आपने 32 बिट पायथन स्थापित किया है। कृपया ध्यान दें कि समस्या को भी उलट किया जा सकता है: शायद 32 बिट में पाइस्पोटिफाइल संकलित किया गया था और libspotify 64 बिट है। – alexp

+0

'' CFLAGS 'को आंतरिक या बाहरी कमांड, ऑपरेट करने योग्य प्रोग्राम या बैच फ़ाइल के रूप में पहचाना नहीं गया है।' विंडोज़ पर आपको मिली त्रुटि है (यह पता * निक्स पर काम करता है)। मैं पर्यावरण चर के साथ खेलने के लिए जा रहा हूँ और पाइथन की जांच 32 बिट है। – Metalshark

0

में pmpotify को पुनर्निर्माण करने का प्रयास करें मैंने इस मुद्दे के वास्तविक टिकट पर संकलन करने के तरीके के बारे में कुछ निर्देश जोड़े हैं। अगर यह आपकी मदद करता है तो मुझे बताएं!

https://github.com/mopidy/pyspotify/issues/63

+0

ध्यान दें कि [केवल-लिंक उत्तर] (http://meta.stackoverflow.com/tags/link-only-answers/info) निराश हैं, SO उत्तर समाधान के लिए खोज का अंत बिंदु होना चाहिए (बनाम। फिर भी संदर्भों का एक और स्टॉपओवर, जो समय के साथ पुराना हो जाता है)। लिंक को संदर्भ के रूप में रखते हुए, यहां स्टैंड-अलोन सारांश जोड़ना पर विचार करें। – kleopatra

+0

मैंने अभी एक खाता बनाया है और अधिकतम लिंक जो मैं पोस्ट कर सकता हूं दो थे। मेरे पास समाधान में कई लिंक थे, इसलिए मैंने वास्तविक टिकट के लिंक को पोस्ट करने के लिए सभी जानकारी बरकरार रखने का सबसे अच्छा तरीका बताया था, मैंने अपना समाधान पोस्ट किया था। – JDurman

+0

बिंदु _solution को यहां पोस्ट करना है (बनाम। किसी अन्य समाधान के लिए लिंक पोस्ट करना :-) – kleopatra