2

我想玩一些 opus,所以我下载了 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”发行版,如果您问我,这对大多数基于 Windows 的开发人员没有任何好处。

“./configure && make”是您构建 UNIX 风格软件的方式,需要大量的文本处理支持工具(automake、autoconf、类似 Bourne 的 shell 等)以及通常的 GCC,而不是Windows 上的平台原生编译器。

正确的答案是生成 .lib 文件,方法是自行将分发中的所有代码移植到 Visual Studio(大量工作)或从 DLL 生成链接库:http: //support.microsoft.com/kb /131313/zh-cn

请注意,一般来说,这不起作用——它仅在库 API 是基于 C(不是基于 C++)并且没有不匹配的分配(您执行分配,而库执行释放)时才起作用,或者反之亦然)以及生成 .dll 文件的编译器是否与 Visual Studio 兼容。

您还可以通过生成具有空实现的“存根”库来生成可链接库,并从中使用 .lib,或者您可以使用 LoadLibrary() 和 GetProcAddress() 使用动态加载。

所以,是的,在构建库的“windows”版本时,libopusfile 开发人员对绝大多数基于 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 文件是使用 /MD 构建的,那么您必须这样做。如果没有以(为您)正确的方式提供 *.lib 文件,那么您最终将希望自己构建库。

[*] 实际上,在 MSVC 中,您可以通过头文件进行自动链接,这是一些 Boost 库使用的技术,但现在让我们忽略这一点。

于 2014-02-21T20:10:52.197 回答