同名微信公众号“固件工人”同步发布的文章,欢迎同时关注,及时获取最新文章。
1 测试平台
这里使用的开发环境如下。
- 操作系统:Ubuntu 20.04.2 LTS x86_64(使用uname -a命令查看)
- wxWidgets版本:3.2.1
- wxWidgets最新源码下载链接:https://github.com/wxWidgets/wxWidgets/tree/master
2 问题描述和分析
使用cmake编译链接从github上下载下来的wxWidgets源码时,出现错误,错误信息如下。从报错的信息看,由于缺少GStreamer的库文件,导致wxMediaCtrl组件无法编译。
-- Could NOT find GSTREAMER (missing: GSTREAMER_VERSION GSTREAMER_INCLUDE_DIRS GSTREAMER_LIBRARIES GSTREAMER_BASE_INCLUDE_DIRS GSTREAMER_BASE_LIBRARIES GSTREAMER_VIDEO_INCLUDE_DIRS GSTREAMER_VIDEO_LIBRARIES) (Required is at least version "1.0")
-- Could NOT find GSTREAMER (missing: GSTREAMER_VERSION GSTREAMER_INCLUDE_DIRS GSTREAMER_LIBRARIES GSTREAMER_BASE_INCLUDE_DIRS GSTREAMER_BASE_LIBRARIES GSTREAMER_INTERFACES_INCLUDE_DIRS GSTREAMER_INTERFACES_LIBRARIES) (Required is at least version "0.10")
CMake Warning at build/cmake/init.cmake:497 (message):
GStreamer not found, wxMediaCtrl won't be available
Call Stack (most recent call first):
build/cmake/main.cmake:17 (include)
CMakeLists.txt:100 (include)
图1 Could NOT find GSTREAMER
3 问题解决
虽然ubuntu系统中默认可以找到GStreamer的一些相关信息,但是貌似并没有完整的库可供wxWidgets链接使用。所以只能自己另外手动安装GStreamer对应的库文件。安装GStreamer库文件的方法参考以下链接。
Gstreamer使用教程(一):Linux下安装和使用Gstreamer_椰果奶茶加冰的博客-CSDN博客_gstreamer linux
对应命令如下,这个命令应该是安装gstreamer的所有组件,所以提示解压后的文件大小有1GB左右,还是挺大的。
sudo sudo apt-get install libgstreamer*
当然,安装过程并不顺利,因为出现部分内容无法下载或连接失败的错误信息,如下图2所示。
图2 无法下载和连接失败
这时只能用以下链接中提供的方法,考虑更换软件源的下载服务器试试看。
ubuntu换国内源_慢下去、静下来的博客-CSDN博客_ubuntu国内源
我这里通过ubuntu的“软件更新器”切换软件源。在弹出的“软件更新器”窗口中,点击左下角的“设置...”按钮,在弹出的“软件和更新”对话框中选择“Ubuntu软件”页面,在“下载自:”后面的选择框中选其他,然后在弹出的对话框中,在“中国”列表中选择合适的国内软件源即可。我这里选择了“mirrors.aliyun.com”,经测试可以解决无法下载和连接失败的问题。如下图3所示。
图3 更换软件源服务器步骤
下载失败后,更换软件源继续下载的方法如下(是参照最后面命令行中的失败重试提示),可以避免重复下载之前已经下载过的内容。
sudo apt-get install libgstreamer* --fix-missing
成功安装好gstreamer后,再用cmake重新配置,发现上面的GSTREAMER无法找到的问题已经不再出现,并且最终编译链接生成的wxWidgets已经包含了media相关的组件了。为了确保系统中已经安装的wxWidgets相关库文件同时得到更新,在cmake完之后,记得要用make install命令来安装wxWidgets库到系统中。默认安装路径下,可以通过/usr/local/lib/wx/include/gtk3-unicode-3.2/wx/setup.h文件中wxUSE_MEDIACTRL和wxUSE_GSTREAMER、wxUSE_GSTREAMER_PLAYER的配置项是否为1来判断media组件是否已经安装。