【问题标题】:How to use gnu make to develop (or even get started with) MS DirectShow applications?如何使用 gnu make 开发(甚至开始使用)MS DirectShow 应用程序?
【发布时间】:2012-01-23 13:49:16
【问题描述】:

我试图用 gnu make 而不是在 Visual Studio/nmake 中构建 DirectShow BaseClasses(在 C:\DXSDK\Samples\C++\DirectShow\BaseClasses 等目录中),但我没有运气。 SDK可以在here下载。

This是一个类似的问题,但答案是针对VS环境的。

如果您熟悉使用 gnu make 工具开发 Microsoft DirectShow 应用程序(特别是构建基类),而不是使用 Microsoft 提供给您的繁琐设备,请帮助!

编辑:我终于放弃了在 MS 框架下使用任何“非 MS”方式进行开发。

【问题讨论】:

  • 您遇到了什么错误?
  • @selbie 问题是:我根本不知道如何为这些基类编写 Makefile!在我对 makefile 的有限了解中,源代码会经过一个过程,然后生成一个可执行文件。但在手头的情况下,最终产品似乎应该是两个.lib文件。
  • 我已经在不同的构建环境中多次编译了 strmbase.lib(所有这些都使用 MS 编译器)。我将不得不挖掘一些旧代码来查看设置了哪些 DEFINE。我会在今天晚些时候尝试为您提供一些建议。

标签: makefile directshow gnu


【解决方案1】:

我不确定您为什么认为 Microsoft 工具很麻烦。命令行和 Visual Studio 工具都非常适合我过去构建 strmbase.lib。事实上,我似乎记得只是安装在 Windows SDK 中,导航到 DShow 库并输入“build”来完成它。

使用自定义构建环境编译 strmbase.lib:

只需像从源代码中创建任何其他代码库 (.lif) 一样创建一个 Makefile。使用指向 Windows SDK 目录的包含路径单独编译所有 .cpp 文件。 (即包含头文件的目录)。然后将编译后的源文件中的所有目标文件打包到一个库存档中。

可选:对于调试版本,只需确保 _DEBUG 和 DEBUG 都是通过您的 Makefile 定义的。 (避免定义一个但不定义另一个的情况)。 stream.h 顶部的一些逻辑会为您处理这个问题。

可选:如果你想要 unicode 字符串,你应该通过你的 Makefile 定义 _UNICODE 和 UNICODE (同样的事情 - 避免定义一个但没有另一个的情况)。如果您的 Makefile 中没有定义,则不必担心这一步。

另外,如果我记得的话,与 ATL 中的定义冲突的文件之一存在一些问题。如果你做到了,就很容易解决。

我不确定您认为的另一个 lib 文件是什么。也许 strmiids.lib?如果您在 Windows SDK 库路径中还没有它,可以很容易地使用一些 INITGUID 定义来生成它。

【讨论】:

  • 感谢您的详细解释。但我仍然无法正确处理。例如,transip.cpp 是 baseclasses 目录中的一个 cpp。当我尝试g++ -c transip.cpp -I"C:\DXSDK\Include" -I. -L"C:\DXSDK\Lib"时,弹出了很多未声明的错误。
  • 编译 transip.cpp 时遇到的第一组错误是什么?我在上面的命令行中没有看到 Windows SDK INCLUDE 目录。
  • 如果您不介意,请看一下编译错误日志here,由同一命令生成。 DXSDK\Include 目录是 DirectX 包含目录。我还尝试添加 Windows SDK Include 目录,但我在错误日志中多了 20k+ 行... :(
  • 您是否尝试过用于 g++ 的“-E”编译器选项,以便检查预处理器输出?可能有一些关键字没有被 g++ 编译器环境定义。
  • 我查看了您的编译日志,我怀疑 MSVC 识别和设置的关键字和隐式 DEFINES 均未在 gnu 中启用。您可以使用 -E 选项来跟踪这些问题,也许还可以使用 #ifdef 一些解决问题的方法。但我肯定知道一件事——微软绝对不会在 gcc/g++ 上测试他们的旧 SDK 头文件。您是否考虑过仅使用 MSVC 执行项目的 DirectShow 特定部分,然后使用更简单的包装库抽象,以便您用 GNU 编写的主项目可以使用它?
猜你喜欢
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 2012-03-13
  • 2023-04-10
相关资源
最近更新 更多