appleyuchi@Ubuntu16:~/demo$ gcc demo.c

/tmp/cc1yENlA.o:在函数‘get_grammar_id’中:
demo.c:(.text+0x146):对‘MSPUploadData’未定义的引用
/tmp/cc1yENlA.o:在函数‘run_asr’中:
demo.c:(.text+0x42b):对‘QISRSessionBegin’未定义的引用
demo.c:(.text+0x502):对‘QISRAudioWrite’未定义的引用
demo.c:(.text+0x597):对‘QISRAudioWrite’未定义的引用
demo.c:(.text+0x5ec):对‘QISRGetResult’未定义的引用
demo.c:(.text+0x72f):对‘QISRSessionEnd’未定义的引用
/tmp/cc1yENlA.o:在函数‘main’中:
demo.c:(.text+0x78a):对‘MSPLogin’未定义的引用
demo.c:(.text+0x885):对‘MSPLogout’未定义的引用

collect2: error: ld returned 1 exit status

以上原因是,虽然asr_sample.c中修改了包含的.h文件的路径,虽然修改准了,还是会报错,这是因为,头文件中只有声明定义,但是没有具体的函数体。

首先注意科大讯飞的官方sdk导入说明:

http://doc.xfyun.cn/msc_linux/412396

*********************************************************************为了方便阅读,罗列如下*********************************************************************:

SDK导入

  • Step 1: 新建工程文件夹
    在当前目录建立一个新目录demo:$ mkdir demo。

  • Step 2:配置工程属性

  1. 将SDK中bin,include,libs文件夹复制到新建工程“Demo”文件夹下

  2. 在demo目录新建文件demo.c,详细源码请参开samples中对应的语音示例

  3. 在demo目录下,创建Makefile文件,具体参见samples下的Makefile,修改路径和目标文件即可

  4. 将samples目录下“32bit_make.sh”文件或者“64bit_make.sh”文件拷到demo目录下,修改libmsc.so库搜索路径

  5. cd到demo目录下,执行“source 32bit_make.sh”或者 “source 64bit_make.sh”完成编译

  6. cd到bin目录下运行目标文件,SDK启动后,bin/msc目录下会生成日志(注意:msc文件夹下需有msc.cfg文件)

*********************************************************************

总结下,上面的sdk导入关键步骤,需要修改路径的地方有三处:

1,64bit_make.sh中的libmsc.so文件路径

2,demo.c中

#include "./include/qisr.h"
#include "./include/msp_cmn.h"
#include "./include/msp_errors.h"

这三个路径都要改

3,Makefile中

DIR_INC = ./include
DIR_BIN = ./bin
DIR_LIB = ./libs
TARGET = demo

注意事项:

讯飞的技术支持mm说最好是x86

所以uname -a先下自己的平台是什么:

Linux Ubuntu16 4.8.0-36-generic #36~16.04.1-Ubuntu SMP Sun Feb 5 09:39:57 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

流程和原理(这个还是要记录下,方便以后出问题时debug):

如果有大二的C语言基础,那么知道#include是用来包含外部头文件的,这个好理解,但是讯飞给的三个头文件中没有具体的函数实现,这些函数实现都在libmsc.so文件中。

所以根据上面一句话,可以理解需要修改上面提到的第1,2两点,由于不同的机器运行环境不一样,demo按照官方文档弄好后,还需要运行makefile文件

所以流程总结:

一、根据官方文档(也就是上面的*之间的流程)先把流程走一遍

二、走完流程后,请再次检查上面三点以及注意事项中的平台(路径中尽量不要有中文)。

三、运行前,我的当前路径下的文件有(请查一遍):

appleyuchi@Ubuntu16:~/demo$ ls
64bit_make.sh  bin  demo.o  include  libs  Makefile

上面字体加粗的是文件夹,其他的是单个文件,在当前路径下,运行方法如下:

1、source 64bit_make.sh

2、make(会自动执行当前路径下的Makefile中的命令)

3、

先cd bin

然后./demo(注意demo(没有后缀)在bin文件夹下面,运行方式不是"gcc/g++/clang   demo.c",也不是下载个linux下面的C++编译器来运行,都不是)

我的运行过程如下:

appleyuchi@Ubuntu16:~/demo$ source 64bit_make.sh 
gcc -c -g -Wall -I./include demo.c -o demo.o
gcc -g -Wall -I./include demo.o -o bin/demo -L./libs/x64 -lmsc -lrt -ldl -lpthread
appleyuchi@Ubuntu16:~/demo$ make
make: 'bin/demo' is up to date.
appleyuchi@Ubuntu16:~/demo$

注意,如果直接用IDE(例如clion、Codeblocks等)运行demo.c(也就是asr_sample.c)会出现开头的报错:不要依赖IDE。

appleyuchi@Ubuntu16:~/demo$ gcc demo.c

/tmp/cc1yENlA.o:在函数‘get_grammar_id’中:
demo.c:(.text+0x146):对‘MSPUploadData’未定义的引用
/tmp/cc1yENlA.o:在函数‘run_asr’中:
demo.c:(.text+0x42b):对‘QISRSessionBegin’未定义的引用
demo.c:(.text+0x502):对‘QISRAudioWrite’未定义的引用
demo.c:(.text+0x597):对‘QISRAudioWrite’未定义的引用
demo.c:(.text+0x5ec):对‘QISRGetResult’未定义的引用
demo.c:(.text+0x72f):对‘QISRSessionEnd’未定义的引用
/tmp/cc1yENlA.o:在函数‘main’中:
demo.c:(.text+0x78a):对‘MSPLogin’未定义的引用
demo.c:(.text+0x885):对‘MSPLogout’未定义的引用

collect2: error: ld returned 1 exit status

也就是说,多种原因都可能出现以上这种报错:

1、64bit_make.sh中的LD_LIBRARY_PATH路径没改好

2、误用IDE运行(codeblocks、clion、vscode等)

3、误用gcc、clang、g++直接运行(缺少大量运行选项)asr_sample.c文件

4、其他原因

ubuntu64位(x86)下科大讯飞sdk使用注意事项相关推荐

  1. tx2需要另一台linux的主机嘛,TX2在x86(ubuntu64位)下交叉编译

    TX2在x86(ubuntu64位)下交叉编译 TX2在x86(ubuntu64位)下交叉编译 ** ** 用TX2做小车底盘控制(采用usb转can方式),厂家不提供源码,只能提供对应版本的SDK, ...

  2. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16...

    一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...

  3. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16

    一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...

  4. 【汇编语言】结合C语言,使用VS 2017调试模式下的反汇编工具学习32位x86汇编指令

    0 前言 简要说明x86系列指令集的整体概况与变化. 我给到你补充学习内容:使用VS学习汇编语言的教程 1 8086CPU到现代CPU的变化 做一些了解即可,不是绝对的,取决于设计工艺以及用途,不同计 ...

  5. android sdk启动不了,windows server 2008下android sdk不能正常启动

    说起这个问题来我就很郁闷,因为这个问题让我白白的损失超过4个G的流量 ,作为在校大学生,这么多的流量可是很让人肉疼的啊(每月总共就10个G的流量,还要看电影.上网啥的,疼啊....),得,闲话少说,入 ...

  6. 【转载】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

    转自:[欧阳鹏]http://blog.csdn.net/ouyang_peng Android 设备的CPU类型(通常称为"ABIs") armeabiv-v7a: 第7代及以上 ...

  7. Linux下科大讯飞语音识别全面总结

    原标题:Linux下科大讯飞语音识别全面总结 首先我们需要的就是Linux下的SDK的下载包,首先在科大讯飞的官网http://www.xfyun.cn/注册,选择我们的语音识别的功能相应的Linux ...

  8. Android 相关的arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

    很好的一篇文章,相关问题学习了一下午,感觉瞬间通透,本文装载自欧阳鹏的博客,原文地址:http://blog.csdn.net/ouyang_peng/article/details/51168072 ...

  9. ASM:《X86汇编语言-从实模式到保护模式》第10章:32位x86处理器的编程架构

    ★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...

最新文章

  1. tomcat6 配置web管理端访问权限
  2. Datawhale组队学习周报(第012周)
  3. 立体相机开发|几何感知的实例分割
  4. Linux - Ubuntu
  5. windows 编写的硬件驱动_哪个是PXI硬件合适的设备驱动程序?VISA还是IVI?
  6. 分布式内存数据库的CAP-BASE原理
  7. linux工程师前景_linux运维工程师前景怎样 就业薪资待遇高吗
  8. 编译32位_玩转Android10源码开发定制(11)内核篇之安卓内核模块开发编译
  9. python压缩文件
  10. 电脑Win10系统如何进入安全模式
  11. flume学习(七):如何使用event header中的key值
  12. 12平键标准尺寸规格表_平键标准尺寸规格表
  13. TVS二极管的工作原理与选型
  14. 72个炫酷的CSS技巧
  15. 转载一篇JAVA面试题
  16. 【数据爬取和数据分析】Q房网深圳二手房源分析
  17. 企业邮箱续费多少钱一年?企业邮箱域名到期如何续费?
  18. 头像采集,学生照片信息采集器
  19. 环形电流计算公式_环形电流的磁场分布 怎么计算
  20. 32岁,我从公司离职了,是裸辞......

热门文章

  1. Profile文件管理
  2. Ajax,再生还是幻灭---好文推荐
  3. 衡量发动机性能的重要指标—升功率
  4. HTTP调试工具:Fiddler 介绍二
  5. 请求地址出现不明的字符%E2%80%8E(Zero-Width Space)
  6. mac好用大java_2020 最后,搞个 Mac 玩玩
  7. 学习响应式BootStrap来写融职教育网站,要是踩到坑就找我。
  8. 基于vue2.0实现音乐/视频播放进度条组件的思路及具体实现方法+代码解释
  9. 记录一个需求:折线图,要求指定年份每一天的记录
  10. LNSYOJ201小胖的奇偶【并查集+离散化】【做题报告】