12

在 Windows PC 上使用MinGW32我正在尝试编译pySpotify。第一个错误是libspotify/api.h丢失了。我通过将适当的文件夹从libspotify复制C:\MinGW\include. 但是,现在由于二进制文件分发dllwrap失败,并且无论我将它们放在哪里(pySpotify 文件夹/子文件夹、临时构建文件夹/子文件夹和 MinGW 文件夹/子文件夹)或我将它们命名为什么(.a、.o 和 .so)仍然显示相同的错误消息。ld linking.Spotifylibspotify.dlllibspotify.lib.

相关的错误是:

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 标头(将 -I~\libspotify\include 之类的内容添加到编译器选项中)和库路径中的共享库(将 -L~\libspotify\lib 添加到链接器选项中)。这将允许编译器找到必要的包含文件,并让您的链接器找到必要的二进制对象。

但是distutilsExtension 类似乎已被弃用并且很难找到文档(我相信这是自定义编译器选项需要去的地方)。欣赏~可能需要更改为%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
4

3 回答 3

1

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

首先,ld众所周知,对论点的顺序很挑剔。奇怪的是,当我在谷歌上搜索“ld 参数顺序”时,我得到了一堆页面暗示顺序无关紧要,但我已经被这个烧了好几次了。我在以下参数顺序方面取得了最大的成功:

  1. 切换到ld(即-Wall
  2. 库搜索路径(即-LPATH
  3. 目标文件
  4. 库(即-lspotify

我在您的链接器输出中注意到一些对 amd64 的引用。我不确定你是如何编译你拥有的其他目标文件的,但由于 libspotify 在 Windows 上是 32 位的,我猜在这里混合 32/64 位不会很好。

我能想到的最后一件事是,也许 dll 扩展名令人困惑ld,您是否尝试将文件名更改为libspotify.so?我知道这有点像在黑暗中拍摄,但否则我不知道如何进一步帮助你。

于 2012-12-17T14:39:36.580 回答
1

我猜您正在尝试将 64 位版本的 pyspotify 与 32 位版本的 libspotify 链接起来。尝试重建 pyspotify 将 -m32 添加到 CFLAGS 和 CXXFLAGS

于 2012-12-18T15:46:19.490 回答
0

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

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

于 2014-01-28T11:02:07.110 回答