我需要一个“so”文件或者出了什么问题?

时间:2012-04-17 16:21:32

标签: c build mingw ld

(我在Windows上。)

我尝试构建pysox。因此我构建了libsox(SoX的一部分)。据说,pysox在你的链接路径中需要“libsox.so和libsox.a”。在构建libsox时,我得到了“libsox.a”,“libsox-1.dll”,“libsox.dll.a”,“libsox.la”,“libsox.lai”以及许多其他奇怪的文件。当我在链接路径中放置“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”文件(我该如何获取)?或者必须改变什么?

1 个答案:

答案 0 :(得分:1)

MinGW为每个动态链接库(DLL)使用静态接口库。 libsox.dll.a库是链接时需要的库,即需要复制到链接路径中的库。在运行时PATH中需要libsox-1.dll,但在链接时不需要。

在Windows平台上不需要.so文件。似乎静态库libsox.a中缺少某些符号,或者链接行中缺少库。 Windows平台不允许在DLL中使用未解析的符号,这与类似UNIX的.so平台相反。您可能必须在命令行中明确地提供包含sox_get_encodings_info和朋友的库,记住链接器行的优先级。