编译avs sdk时遇到的一些问题的解决过程

最近Alexa比较热门,为了深入一点理解这项新技术的工作原理,下载了相关的sdk源码准备在电脑上运行一下。我的平台是macOS,按照说明一步一步下来,遇到了一些问题,由于缺少说明,只好自己摸索,有时候没有时间搞就放下,到了今天,终于把所有难关通过,Alexa的基本功能已经出来了。在高兴之余,觉得有必要把这个过程遇到的问题记录下来,这样以后遇到这个问题也比较好回忆,也希望能对别人有所启发。

问题一:gstreamer路径找不到

在执行

cd ~/sdk-folder/sdk-build && cmake /Users/huziqin/sdk-folder/sdk-source/avs-device-sdk -DGSTREAMER_MEDIA_PLAYER=ON -DPORTAUDIO=ON -DPORTAUDIO_LIB_PATH=/Users/huziqin/sdk-folder/third-party/portaudio/lib/.libs/libportaudio.a -DPORTAUDIO_INCLUDE_DIR=/Users/huziqin/sdk-folder/third-party/portaudio/include

这一条命令主要是利用cmake这个工具生成项目的makefile文件,但当我运行的时候会报错,就是这样:

– Found PkgConfig: /opt/local/bin/pkg-config (found version “0.29.2”)
– Checking for modules ‘gstreamer-1.0>=1.8;gstreamer-app-1.0>=1.8’
– No package ‘gstreamer-1.0’ found
– No package ‘gstreamer-app-1.0’ found

这个意思就是没有找到gstreamer,但我实际上是通过homebrew安装过的,原因有可能是因为cmake没有办法找得到相应的路径,于是我手动告诉cmake路径,这样就可以了,具体的命令就是:

$ export PKG_CONFIG_PATH=”/usr/local/Cellar/gstreamer/1.12.4/lib/pkgconfig/:/usr/local/Cellar/gst-plugins-base/1.12.4_1/lib/pkgconfig/”

其中对应的路径是实际上的.pc文件所在的路径,我是通过使用find命令查找到的。通过这条命令,会输出一个环境变量PKG_CONFIG_PATH,然后在执行cmake的时候会查看这个变量,这样就能找到了。而.pc文件是用来描述相应的模块的信息,比如它的头文件路径。

问题二:找不到glib.h路径

是的,虽然通过了cmake,但在编译的时候,还是会报错,具体原因还不知道,但我想到一个变通的办法,就是直接指定文件的路径。不过这次要修改的是Mediaplayer/src/下面的CMakelist.txt,cmake就是根据这个文件来产生相应的makefile文件.修改的方法是在这个文件中包含缺少的目录路径,然后重新调用cmake命令生成makefile文件。

include_directories(“/usr/local/Cellar/glib/2.54.3/include/glib-2.0/”)
include_directories(“/usr/local/Cellar//glib/2.54.3/lib/glib-2.0/include/”)

就是这样,就可以找到,通过编译了。
glib是gun开源软件用到的一个基础库,在gstreamer里面也需要链接这个库。

问题3: 编译通过了,运行时报错

这个问题是耗时最长的,直到有一天我突然想到,也许跟我的编译环境有关。
当时报错的提示是:

$ alexac
2018-02-24 12:26:17.144 [ 1] I sdkVersion: 1.5.0
(process:10547): GLib-CRITICAL **: g_datalist_id_dup_data: assertion ‘key_id != 0’ failed
(process:10547): GLib-CRITICAL **: g_datalist_id_set_data_full: assertion ‘key_id > 0’ failed
(process:10547): GLib-GObject-CRITICAL **: g_param_spec_pool_lookup: assertion ‘pool != NULL’ failed
(process:10547): GLib-GObject-WARNING **: g_object_set_valist: object class ‘(null)’ has no property named ‘silent’
(process:10547): GLib-CRITICAL **: g_datalist_id_dup_data: assertion ‘key_id != 0’ failed
(process:10547): GLib-CRITICAL **: g_datalist_id_set_data_full: assertion ‘key_id > 0’ failed
(process:10547): GLib-GObject-CRITICAL **: g_param_spec_pool_lookup: assertion ‘pool != NULL’ failed
(process:10547): GLib-GObject-WARNING **: g_object_set_valist: object class ‘(null)’ has no property named ‘sync’

对于这样的错误提示,去网上查找,基本上找不到什么有用的解决方案。
后来我开始想,会不会是因为有一些同名的gcc,或者类似的一些用来编译的工具相互之间有冲突呢?因为我用来开发的这个系统之前也用来开发其他项目,比如为了开发安卓,安装过安卓的sdk,然后也安装过macport用来编译安卓系统软件,为了运行机器学习的软件也装了一些相关的工具,然后现在为了调试Alexa,也装了homebrew。然后我了解到macport和homebrew功能类似但是互不兼容。所以我的办法是删除掉macport,把其他不用的开发工具不要导入到PATH变量中,只把最必要的路径保留下来。
经过一番修改,最终path变成这样:

/usr/local/opt/curl/bin:/Users/huziqin/miniconda3/bin:/Library/Developer/CommandLineTools/usr/bin/:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Wireshark.app/Contents/MacOS

这就比原来简单多了,不存在重复的工具。
然后我重新编译,就不会再出现这种运行时的错误了。

问题4:无法获取token

就是运行:

cd ~/sdk-folder/sdk-build && python AuthServer/AuthServer.py

显示连接不上,但又不提示是哪里造成的问题,检查AlexaClientSDKConfig.json文件是没有问题的,后来发现是在开发者终端上面配置Alexa产品时没有设置正确。也就是漏掉了下面这一步:
这里写图片描述

因为这里是配置本地的服务器的端口,这里没有配置就会无法获取到token。
当然,真正的原因我还是有些不明白,为什么Alexa运行需要在本地产生一个web server,不是可以直接连接amazon的server吗?还是说仅仅是产生token的时候才需要在本地运行一个server呢?是不是时为了方便调试才需要在本地运行一个server来进行认证?这些疑问就等待以后进一步研究吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值