1

(私は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」ファイルが必要ですか(どうすれば入手できますか)?または何を変更する必要がありますか?

4

1 に答える 1

1

MinGWは、ダイナミックリンクライブラリ(DLL)ごとに静的インターフェイスライブラリを使用します。libsox.dll.aライブラリは、リンク時に必要なライブラリです。つまり、リンクパスにコピーする必要があります。libsox-1.dllは、実行時にPATHに必要ですが、リンク時には必要ありません。

Windowsプラットフォームでは.soファイルは必要ありません。静的ライブラリlibsox.aからいくつかのシンボルが欠落しているか、リンクラインからライブラリが欠落しているようです。UNIXのような.soプラットフォームとは異なり、WindowsプラットフォームではDLLで未解決のシンボルを使用できません。sox_get_encodings_infoリンカ行の優先順位を覚えて、コマンドラインで明示的にandfriendsを含むライブラリを指定する必要がある場合があります。

于 2012-04-17T16:30:57.087 に答える