【问题标题】:How to link opus to your visual studio project?如何将作品链接到您的视觉工作室项目?
【发布时间】:2014-03-23 10:05:13
【问题描述】:

我想玩一些 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...

如有任何帮助,我们将不胜感激!

【问题讨论】:

    标签: c++ visual-studio-2010 linker opus


    【解决方案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/en-us

    请注意,一般来说,这不起作用——它仅在库 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 文件。

    【讨论】:

      【解决方案2】:

      opus1.1/win32中有一个.sln文件,用visual studio 2010打开,编译调试发布,然后生成.lib文件

      【讨论】:

      • 它不适合我,因为没有 DLL 导出。一旦我添加了_declspec,它就做到了。
      【解决方案3】:

      C++ 库通常由头文件(用于编译器)和库文件(用于链接器)组成。您只提供了头文件但没有提供库文件,因此链接器会抱怨。包含路径只针对头文件,与链接器[*]无关。

      您下载的库可能包含一些 *.lib 文件。那是链接器需要的文件。在 Visual Studio 中,在“VC++ 目录 > 库目录”(最好在所谓的“属性管理器”窗口中)指定文件的目录,并在项目设置中,在“链接器 > 输入 >附加依赖项”。

      现在困难在于:您必须确保使用与构建 *.lib 文件相同的运行时库设置来编译您的项目。例如,如果 *.lib 文件是用 /MD 构建的,那么您必须这样做。如果 *.lib 文件没有以(为您)正确的方式提供,那么您最终将需要自己构建库。

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

      【讨论】:

      • 是的,这是最奇怪的部分,我真的找不到任何 lib 文件夹或 lib 文件。现在找到了一个自述文件,它说:“== 编译 libopus ==要从发行版 tarball 构建,您只需要执行以下操作: % ./configure % make ” 不太确定如何处理它
      • 这个答案对这个问题没有帮助,因为,不,opusfile 库不包含 .lib 文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2011-04-04
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2011-10-29
      相关资源
      最近更新 更多