我正在开发一个使用GStreamer库的应用程序。为了便于部署,我想收集本地捆绑中的所有GStreamer库。为此我写了一个小脚本,执行以下操作:
otool -L
)install_name_tool
)(如果您有兴趣,可以查看Ruby script。)
但是,我现在看到gst_init
电话上的运行时错误:
(process:22843): GLib-GObject-CRITICAL **: gtype.c:2458: initialization assertion failed, use g_type_init() prior to this function
(process:22843): GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed
只有在我使用本地化库时才会出现这些错误。
在使用install_name_tool时是否存在某些“常见陷阱”?有谁知道我可能做错了什么?如果您需要了解某些细节,请随时询问。
更新的
我改变了一些事情:
install_name_tool -change
而不是install_name_tool -id
)。@executable_name/components/Video.dylib
)的id值。这两项变化使其有效。但是,我还不清楚它为什么会起作用。我在理解“id”属性的含义时遇到了一些麻烦。它似乎是路径名形式的标识符。为什么为依赖库更改它会导致运行时错误?我会尝试通过一些进一步的实验来找到这些问题的答案......
答案 0 :(得分:1)
也许您应该考虑对代码进行静态编译。 这将更好地将您的依赖项附加到您的程序
如果你正在使用gcc,只需添加-static
答案 1 :(得分:0)
GStreamer是一个复杂的系统,具有很多依赖性。使用工具可以找到GStreamer直接需要的共享库,但是他们肯定会错过动态加载的库,配置文件以及翻译数据。
This site probably contains some usefull info创建一个独立的GStreamer软件包,可以简化捆绑的prpcess。