(我在窗户上。)
我试图建立pysox。因此我建立了libsox(它是SoX的一部分)。据说,pysox需要“libsox.so和libsox.a在你的链接路径中”,在构建libsox时,我得到了“libsox.a”、“libsox-1.dll”、“libsox.dll.a”、“libsox.la”、“libsox.la I”等许多奇怪的文件。当我在链接路径中放置“libsox.a”时,前面显示的错误消失了。但是现在,构建脚本在调用mingw32 gcc时出现了一个错误,它说:

C:\Programme\MinGW\bin\mingw32-gcc.exe -shared -s build\temp.win32-2.7\Release\pysox\sox.o build\temp.win32-2.7\Release\pysox\sox.def -LC:\Programme\Python\libs -LC:\Programme\Python\PCbuild -lsox -lpython27 -lmsvcr90 -o build\lib.win32-2.7\pysox\sox.pyd
build\temp.win32-2.7\Release\pysox\sox.o:sox.c:(.text+0x3a96): undefined reference to `sox_get_encodings_info'
build\temp.win32-2.7\Release\pysox\sox.o:sox.c:(.text+0x5035): undefined reference to `sox_get_encodings_info'
build\temp.win32-2.7\Release\pysox\sox.o:sox.c:(.text+0x795d): undefined reference to `bcopy'
build\temp.win32-2.7\Release\pysox\sox.o:sox.c:(.text+0xa8b3): undefined reference to `bcopy'
collect2: ld returned 1 exit status
error: command 'mingw32-gcc' failed with exit status 1

以下尝试不起作用:
在链接路径中放置“libsox-1.dll”
将其重命名为“libsox.dll”
将其重命名为“libsox.so”
将所有与“libsox.a”一起生成的文件放在链接路径中
我真的需要Windows上的“so”文件吗?或者必须改变什么?

最佳答案

MinGW为每个动态链接库(DLL)使用一个静态接口库。libsox.dll.a库是链接时所需的库,即需要复制到链接路径中的库。运行时路径中需要libsox-1.dll,但链接时不需要。
你不需要Windows平台上的.so文件。静态库libsox.a中似乎缺少某些符号,或者链接行中缺少库。Windows平台不允许dll中有未解析的符号,这与类UNIX.so平台相反。您可能必须在命令行上显式地给出包含sox_get_encodings_info和friends的库,并记住链接器行上的优先级。

关于c - 我需要一个“so”文件还是什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10195112/

10-11 18:15