我有一个奇怪的问题
我正在安装protoc 3.6.1的VM上编译应用程序。然后它构建一个zip文件,我scp到另一台机器,我解压缩并运行它。
我在该计算机上运行的命令都不需要使用协议缓冲区。
loop = g_main_loop_new( NULL, FALSE );
gst_init(NULL, NULL);
snprintf( str_pipeline, sizeof( str_pipeline ), "appsrc name=mysource ! videoconvert ! " "video/x-raw,width=1920,height=1080,format=NV12 ! vaapih264enc ! h264parse ! rtph264pay ! " "udpsink host=%s port=5600", "xxx.xx.xx.xxx");
// Instruct GStreamer to construct the pipeline
pipeline = gst_parse_launch( str_pipeline, &gerror );
if( !pipeline )
{
printf( "gst_parse_launch error. Cannot launch GStreamer..: %s\n", gerror->message );
return false;
}
appsrc = gst_bin_get_by_name( GST_BIN( pipeline ), "mysource" );
app_caps = gst_caps_new_simple( "video/x-raw", "format", G_TYPE_STRING, "RGB", "width", G_TYPE_INT, WIDTH, "height", G_TYPE_INT, HEIGHT, NULL );
但是,当我运行上面的代码gstreamer命令(特别是gst_parse_launch()),这给了我这个错误 -
[libprotobuf FATAL google/protobuf/stubs/common.cc:79] This program was compiled against version 2.6.1 of the Protocol Buffer runtime library, which is not compatible with the installed version (3.6.1). Contact the program author for an update. If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library. (Version verification failed in "/build/mir-O8_xaj/mir-0.26.3+16.04.20170605/obj-x86_64-linux-gnu/src/protobuf/mir_protobuf.pb.cc".)
我不认为gstreamer与protoc有任何关系,但我想确认一下。 gstreamer 1.0是用protoc 2.6.1编译的吗?
如果不是这种情况,为什么我在解压缩的VM上出现此错误?它没有安装protoc并且正在运行Ubuntu 16.04。
正如你所说,我可以看到,这里没有使用protobuf。
在这种情况下,我怀疑的第一件事是你的一些随机文件指向你的机器上的一些protobuf文件,而编译。 (虽然我不知道为什么)。这里安全的做法是卸载protoc(所有版本)。您可以根据操作系统选择卸载方式。
然后再尝试编译它。也许这可能会向我们展示一些和平的天堂:P
EDIT1
我在我的系统上尝试了这个(我安装了gstreamer和protobuf以及grpc)
str_pipeline ="audiotestsrc ! audioconvert ! autoaudiosink";
cout << str_pipeline << endl;
// Instruct GStreamer to construct the pipeline
pipeline = gst_parse_launch(static_cast<const gchar*>(str_pipeline), &gerror);
if (!pipeline) {
printf("gst_parse_launch error. Cannot launch GStreamer..: %s\n",
gerror->message);
return false;
}
而且我没有得到和你一样的错误。 (也许你可以试试这个)
我得到的错误是:
GStreamer-CRITICAL **: gst_parse_launch_full: assertion 'error == NULL || *error == NULL' failed