在MinGW32中使用libspotify .dll / .lib文件编译pySpotify

时间:2012-12-13 20:00:01

标签: python c spotify cpython

在Windows PC上使用MinGW32我正在尝试编译pySpotify。第一个错误是libspotify/api.h丢失了。我通过将libspotify中的相应文件夹复制到C:\MinGW\include修复。但是现在dllwrap现在失败ld linking.二进制文件Spotify分发为libspotify.dlllibspotify.lib.无论我把它们放在哪里(pySpotify文件夹/子文件夹) ,临时构建文件夹/子文件夹和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 says on github

  

您需要在include路径中添加API头(在编译器选项中添加类似-I~ \ libspotify \ include的内容)和库路径中的共享库(将-L~ \ libspotify \ lib添加到链接器中)选项)。这将允许编译器找到必要的包含文件,并使链接器找到必要的二进制对象。

然而,distutils Extension类似乎已被弃用且很难找到文档(我相信这是自定义编译器选项需要去的地方)。感谢~可能需要更改为%USERPROFILE%或类似内容。同样地,%PYTHONPATH%\Lib\distutils\distutils.cfg除了[build] compiler=mingw32节之外几乎没有文档。这使得编辑编译/链接命令及其选项无法改变。

如何在Windows上编译pySpotify?

修改

使用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

3 个答案:

答案 0 :(得分:1)

目前无法访问mingw安装,我可以提出一些建议。

首先,ld对于参数的顺序是挑剔的。奇怪的是,当我用Google搜索“ld argument order”时,我得到了一堆页面,暗示订单无关紧要,但我已经被烧了好几次了。我通过以下参数顺序取得了最大的成功:

  1. 切换为ld(即-Wall
  2. 图书馆搜索路径(即-LPATH
  3. 对象文件
  4. 图书馆(即-lspotify
  5. 我在链接器输出中注意到对amd64的一些引用。我不确定你是如何编译你拥有的其他目标文件的,但是由于libspotify在Windows上是32位的,我猜这里混合使用32/64位并不会很好。

    我能想到的最后一件事是,dll扩展程序可能会让ld感到困惑,您是否尝试将文件名更改为libspotify.so?我知道这是一个黑暗中的镜头,但我不知道如何进一步帮助你。

答案 1 :(得分:1)

我猜你试图将64位版本的pyspotify与32位版本的libspotify相关联。尝试重建pyspotify,将-m32添加到CFLAGS和CXXFLAGS

答案 2 :(得分:0)

我已经添加了一些关于如何在问题的实际票证上进行编译的说明。让我知道它是否对你有帮助!

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