【问题标题】:Building Gstreamer 1.0.5 on Windows在 Windows 上构建 Gstreamer 1.0.5
【发布时间】:2013-03-10 05:58:52
【问题描述】:

我已按照自述文件中的说明设置项目,并安装并编译了 GLib 2.28.8。当我开始编译 gstreamer 时,我收到了数千个错误,这些错误表明构建设置或 GLib 版本有问题。我找不到其他适用于 Windows 的 GLib 版本的简单来源(我在这里尝试了 GLib 的 dev 和 sources 版本:http://www.gtk.org/download/win32.php)。

第一个编译错误是:

...\build\gstreamer-1.0.5\gst/gstobject.h(170): error C2079: 'lock' uses undefined struct '_GMutex'

在gstobject中,锁定义为:

GMutex         lock;        /* object LOCK */

Visual Studio 根据 gthread.h 中的定义找到哪个

typedef struct _GMutex          GMutex;

所以对我来说一切都很好,但也许我忽略了一些东西。 glibconfig.h 也将 _GMutex* 定义为 GStaticMutex,会不会有干扰?

【问题讨论】:

  • 是否也定义了struct _GMutex
  • 在glibconfig.h中,有这样的: typedef struct _GMutex* GStaticMutex;
  • 那个typdef定义了GStaticMutex,请检查struct _GMutex本身是在哪里定义的。
  • 当然 - 我找不到在 GLib 中定义 _GMutex 的位置。
  • 在进行更多挖掘之后,我发现 _GMutex、_GCond 和 _GPrivate 都有 typedef 结构,用于它们的无下划线对应物(GMutex、GCond 和 GPrivate),但似乎没有自己定义。 (在这里查看 GLib 本身)。虽然编译 GLib 似乎工作得很好,但 GStreamer 似乎不喜欢那样。想法?纯 C 并不是我真正的语言,所以也许我遗漏了一些东西。

标签: c++ gstreamer glib


【解决方案1】:

我用的是glib.2.28.8,也遇到了同样的问题。以下两个线程(12)也讨论了相关问题。

就我而言,只需添加

struct _GMutex
{
  /*< private >*/
  gpointer p;
  guint i[2];
};

之前

struct _GMutex GMutex;

【讨论】:

  • 啊 - 很高兴知道有一个解决方案。感谢您的跟进。对于从原始问题来到这里的任何人,gstreamer 已经开始为所有平台发布构建:gstreamer.freedesktop.org/download
【解决方案2】:

也许你应该尝试将你的 Glib 更新到 2.32.0

我使用 Glib 2.32.4 在 Linux 和 Windows Xp 上成功构建了 GStreamer-1.0.5

查看configure.ac

dnl GLib

GLIB_REQ=2.32.0

AG_GST_GLIB_CHECK([$GLIB_REQ])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多