appleyuchi@Ubuntu16:~/demo$ gcc demo.c
/tmp/cc1yENlA.o:在函数‘get_grammar_id’中:collect2: error: ld returned 1 exit status
以上原因是,虽然asr_sample.c中修改了包含的.h文件的路径,虽然修改准了,还是会报错,这是因为,头文件中只有声明定义,但是没有具体的函数体。
首先注意科大讯飞的官方sdk导入说明:
http://doc.xfyun.cn/msc_linux/412396
*********************************************************************为了方便阅读,罗列如下*********************************************************************:
将SDK中bin,include,libs文件夹复制到新建工程“Demo”文件夹下
在demo目录新建文件demo.c,详细源码请参开samples中对应的语音示例
将samples目录下“32bit_make.sh”文件或者“64bit_make.sh”文件拷到demo目录下,修改libmsc.so库搜索路径
cd到demo目录下,执行“source 32bit_make.sh”或者 “source 64bit_make.sh”完成编译
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’中: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、其他原因