Подтвердить что ты не робот

Использование libspotify.dll/.lib файлов в компиляции MinGW32 pySpotify

Используя MinGW32 на ПК с Windows, я пытаюсь скомпилировать pySpotify. Первая ошибка заключалась в отсутствии libspotify/api.h. Я исправил это, скопировав соответствующую папку из libspotify в C:\MinGW\include. Однако теперь dllwrap теперь терпит неудачу с ld linking. Распространение двоичных файлов Spotify - это libspotify.dll и libspotify.lib. Независимо от того, где я их помещаю (папка/подпапки pySpotify, папка/подпапки temp build и папка/подкаталоги MinGW) или что я называю их (.a,.o и .so), он все еще показывает те же сообщения об ошибках.

Уместная ошибка:

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 говорит о github, что:

Вам нужно добавить заголовки API в путь include (добавьте что-то вроде -I ~\libspotify\include к вашим параметрам компилятора) и общую библиотеку в пути библиотеки (add -L ~\libspotify\lib к вашему компоновщику опции). Это позволит компилятору найти необходимые файлы include и ваш компоновщик для поиска необходимых двоичных объектов.

Однако класс distutils Extension кажется устаревшим и трудно найти документацию (я полагаю, что это нужно, когда нужно настраивать параметры компилятора). Цените, что ~ может потребоваться изменить на %USERPROFILE% или аналогичный. Аналогично, %PYTHONPATH%\Lib\distutils\distutils.cfg имеет небольшую документацию за строкой [build] compiler=mingw32. Это позволяет редактировать команды компиляции/ссылки, а их параметры невозможно изменить.

Как вы компилируете pySpotify в Windows?

EDIT:

Используя Python 2.6 и скопировав libspotify.dll/libspotify.lib на C:\Python26\PCbuild и переименовав их в spotify.dll/libspotify.lib, я получаю еще одно сообщение об ошибке от ld:

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
4b9b3361

Ответ 1

Не имея доступа к установке mingw на данный момент, я могу предложить несколько вещей.

Во-первых, ld, как известно, придирчив к порядку аргументов. Как ни странно, когда я googled для "ld аргумент порядке", я получил кучу страниц, предлагающих, что порядок не имеет значения, но я был сожжен несколько раз этим. Я добился наибольшего успеха в следующем порядке:

  • Переключает на ld (т.е. -Wall)
  • Пути поиска библиотеки (т.е. -LPATH)
  • Файлы объектов
  • Библиотеки (т.е. -lspotify)

Я заметил, что в вашем компоновщике выводятся некоторые ссылки на amd64. Я не уверен, как вы скомпилировали другие файлы объектов, которые у вас есть, но поскольку libspotify 32-разрядный в Windows, я предполагаю, что смешивание 32/64 бит здесь не будет слишком хорошо работать.

Последнее, что я могу придумать, - возможно, расширение dll смущает ld, вы пытались изменить имя файла на libspotify.so? Я знаю, что это нечто вроде выстрела в темноте, но в остальном я не уверен, как помочь вам дальше.

Ответ 2

Я думаю, вы пытаетесь связать 64-битную версию pyspotify с 32-разрядной версией libspotify. Попробуйте перестроить pyspotify, добавив -m32 в CFLAGS и CXXFLAGS

Ответ 3

Я добавил несколько инструкций о том, как я получил его для составления фактического билета для этой проблемы. Позвольте мне знать, помогло ли вам это!

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