2

opus someで遊んでみたかったので、opus 1.1をダウンロードしましたが、Visual Studio 2010 Expressプロジェクトに実際にリンクできないようです。opus1.1/include パスを properties/vc++Directoris/include ディレクトリに追加しようとしましたが、リンカーはまだいくつかの関数について不平を言っています

error LNK2019: unresolved external symbol _opus_decoder_create referenced in function ...
error LNK2019: unresolved external symbol _opus_decoder_destroy referenced in function...
error LNK2019: unresolved external symbol _opus_encoder_destroy referenced in function...
error LNK2019: unresolved external symbol _opus_encoder_ctl referenced in function...
error LNK2019: unresolved external symbol _opus_encode referenced in function...
error LNK2019: unresolved external symbol _opus_decode referenced in function...

どんな助けでも感謝します!

4

3 に答える 3

2

opus1.1/win32 に .sln ファイルがあり、それを Visual Studio 2010 で開き、デバッグおよびリリース用にコンパイルすると、.lib ファイルが作成されます

于 2014-04-19T10:54:09.063 に答える
1

その理由は、opusfile の「Windows」ディストリビューションが mingw64 でコンパイルされ、.a リンク ライブラリと従来の .dll ファイルを生成するためです。したがって、opusfile を Visual Studio にリンクする簡単な方法はありません。

これは、提供されているように、mingw64 を使用して "Windows" ディストリビューションにリンクすることしかできないことを意味します。

「./configure && make」は、UNIX スタイルのソフトウェアを構築する方法であり、大量のテキスト処理サポート ツール (automake、autoconf、Bourne のようなシェルなど) と、通常は GCC ではなく、 Windows のプラットフォーム ネイティブ コンパイラ。

正しい答えは、ディストリビューション内のすべてのコードを独自に Visual Studio に移植する (多くの作業) か、DLL からリンク ライブラリを生成することによって、.lib ファイルを生成することです: http://support.microsoft.com/kb /131313/en-us

一般に、これは機能しないことに注意してください。ライブラリ API が C ベース (C++ ベースではない) であり、不一致の割り当てがない場合 (ユーザーが割り当てを行い、ライブラリが解放するか、またはその逆)、および .dll ファイルを生成したコンパイラが Visual Studio と互換性のある ABI である場合。

また、空の実装で「スタブ」ライブラリを生成してリンク可能なライブラリを生成し、そこから .lib を使用するか、LoadLibrary() と GetProcAddress() を使用して動的読み込みを使用することもできます。

つまり、libopusfile の開発者は、大多数の Windows ベースの開発者にとって、ライブラリの「Windows」バージョンを構築する際に特に役に立ちませんでした。

ところで: 私自身、この非常に役に立たない SDK に問題があり、それらを解決して、Visual Studio のソリューションを再パッケージ化しました。これには、必要ではあるが含まれていない追加のヘッダー ファイルが含まれ、dumpbin を使用して見つかった関数から .lib リンク可能なライブラリを生成します。これは広範囲にテストされていないことに注意してください。

http://www.enchantedage.com/opusfile-0.6-for-visual-studio

これには、Visual Studio に必要なヘッダーと .lib ファイルが含まれます。

于 2014-09-10T02:16:58.063 に答える
0

C++ ライブラリは通常、ヘッダー ファイル(コンパイラ用) とライブラリ ファイル(リンカー用) で構成されます。ヘッダー ファイルのみを提供し、ライブラリ ファイルは提供しなかったため、リンカは不平を言います。インクルード パスはヘッダー ファイルのみであり、リンカとは関係ありません [*]。

ダウンロードしたライブラリには、*.lib ファイルが含まれている可能性があります。これは、リンカーが必要とするファイルです。Visual Studio で、「VC++ ディレクトリ > ライブラリ ディレクトリ」(できれば、いわゆる「プロパティ マネージャー」ウィンドウ) でファイルのディレクトリを指定し、プロジェクト設定で、「リンカー > 入力 >」で *.lib ファイルを指定します。追加の依存関係」。

ここで問題があります。*.lib ファイルがビルドされたときと同じランタイム ライブラリ設定でプロジェクトがコンパイルされていることを確認する必要があります。たとえば、*.lib ファイルが /MD でビルドされた場合、同じことを行う必要があります。*.lib ファイルが (あなたにとって) 正しい方法で提供されていない場合、最終的にはライブラリを自分で構築したくなるでしょう。

[*] 実際、MSVC では、一部の Boost ライブラリで使用されている手法であるヘッダー ファイルを介した自動リンクを使用できますが、ここではこれを無視しましょう。

于 2014-02-21T20:10:52.197 に答える