【问题标题】:GStreamer illegal hardware instructionGStreamer非法硬件指令
【发布时间】:2017-10-16 15:00:21
【问题描述】:

我正在尝试学习 GStreamer。我正在使用 macOS 10.13-x86_64。
我开始编写this 教程。

最初我安装了 GStreamer .pkg 文件。
GStreamer 安装在/Library/Frameworks/GStreamer.framework
我设法编译并运行了教程,但我需要使用sudo 才能访问/Library/Frameworks/GStreamer.framework 目录。

后来我发现我可以通过 homebrew 安装 GStreamer。
所以,我手动删除了/Library/Frameworks/GStreamer.framework 并运行以下命令:

brew install gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav

很遗憾,本教程现在抛出运行时错误。

./basic-1
[1]    1873 illegal hardware instruction  ./basic-1

我尝试用 lldb 调试错误(我对 lldb 很陌生,几乎什么都不会)。

lldb basic-1
(lldb) target create "basic-1"
Current executable set to 'basic-1' (x86_64).
(lldb) run
Process 2129 launched: '/Users/aleksey/projects/media/gstreamer-dummy/basic-1' (x86_64)
Process 2129 stopped
* thread #14, stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
    frame #0: 0x00007fff3b0e3939 CoreFoundation`__CFRunLoopDeallocate + 537
CoreFoundation`__CFRunLoopDeallocate:
->  0x7fff3b0e3939 <+537>: ud2
    0x7fff3b0e393b <+539>: nopl   (%rax,%rax)

CoreFoundation`__CFRunLoopCleanseSources:
    0x7fff3b0e3940 <+0>:   pushq  %rbp
    0x7fff3b0e3941 <+1>:   movq   %rsp, %rbp
Target 0: (basic-1) stopped.

而且我不知道该怎么办。

我用

编译代码
gcc -Wall basic-tutorial-1.c -o basic-1 $(pkg-config --cflags --libs gstreamer-1.0)

我有以下配置

$ pkg-config --cflags --libs gstreamer-1.0
-D_REENTRANT -I/usr/local/Cellar/gstreamer/1.12.3/include/gstreamer-1.0 -I/usr/local/Cellar/glib/2.54.1/include/glib-2.0 -I/usr/local/Cellar/glib/2.54.1/lib/glib-2.0/include -I/usr/local/opt/gettext/include -I/usr/local/Cellar/pcre/8.41/include -L/usr/local/Cellar/gstreamer/1.12.3/lib -L/usr/local/Cellar/glib/2.54.1/lib -L/usr/local/opt/gettext/lib -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lintl -Wl,-framework -Wl,CoreFoundation

你能帮我解决这个问题吗?有什么问题?

【问题讨论】:

  • 你的问题解决了吗,我现在也有同样的问题
  • @AlbaHoo 老实说我不记得我是否设法修复它。我想我没有修复它,但它变得与我无关。

标签: macos clang homebrew gstreamer


【解决方案1】:

我遇到了同样的问题,我找到了一些答案here (https://bugzilla.gnome.org/show_bug.cgi?id=790242)。我在这里等待一些额外的 cmets https://github.com/sdroege/gstreamer-rs/issues/58

总结:

Remi Achard Apr 11, 2020; 7:55pmRe: Illegal hardware instructions when running basic-tutorial-1 on mac OS 10.15.2 / brew installation

现在看来教程(至少是第一个)在 macOS 上已经有好几年了。

[Sebastian Dröge (slomo) 2017-11-12 12:41:44 UTC]

参见https://github.com/sdroege/gstreamer-rs/issues/58,同样适用于 C 教程。

问题是对于 osxvideosink 和 glimagesink 我们需要运行一个 NSRunLoop 在 macOS 的主线程上。我们修补的 GLib 版本可以 当您运行 GMainLoop 时(上游 GLib 不会!),但是 示例仅使用 gst_bus_timed_pop_filtered() 所以也 没用。

使用 GMainLoop 会使教程内容更丰富 复杂,需要引入更多的API,总会有 是回调等。

不知道该怎么办!

可能的解决方案:

[Kornel 2017-11-12 13:34:16 UTC]

通过在 一个线程,并在主线程上调用 CFRunLoopRun()。这个需要 只与foundation.framework链接。


[更新01] 我能够成功编译并运行Basic tutorial 12: Streaming


[更新 02]

发件人:Sebastian Dröge [2020 年 12 月 29 日上午 11:53 GMT+0100]

不是你需要一个 GLib 主循环,而是 macOS 要求你 在主线程上运行 NSRunLoop 以使各种 macOS API 工作 正确。 GStreamer 视频接收器使用此类 API。 GLib 主循环 (来自 GStreamer 二进制文件附带的 GLib 版本!)运行 NSRunLoop 本身就是出于这个原因。这是对 macOS 的限制 你必须以某种方式适应并且与 GStreamer 无关, 这可能应该在 GStreamer 文档。

更多信息:https://gitlab.freedesktop.org/gstreamer/gst-docs/-/issues/79


其他相关帖子134

【讨论】:

    猜你喜欢
    • 2022-12-06
    • 2021-10-26
    • 2021-07-11
    • 2021-08-19
    • 2013-04-29
    • 2023-02-03
    • 2020-03-23
    • 2018-08-25
    • 1970-01-01
    相关资源
    最近更新 更多