由于解决问题的方法并没有统一性, 为以后安装节省时间,特记录于此.
真正找到问题所在及解决问题的方法,会令你更进一步.
(多画面)开发环境的建立(1)基础环境
(在centos 上建立, ubuntu上因安装命令不同会略有不同)
开放环境: Qt+sdl2+ffmpeg+opencv+ekho
1. 安装Qt5.14.0
sudo ./qt-opensource-linux-x64-5.14.0.run
2. 安装devtoolset-8
默认的gcc4.8.5编译Qt5.14的工程会有问题,所以安装devtoolset-8
yum install centos-release-scl
yum install devtoolset-8
临时生效: $scl enable devtoolset-8 bash
开机生效: 在/etc/profile.d/目录下,添加一个文件例如命名为toolset8.sh
内容为:source /opt/rh/devtoolset-8/enable
小心,这里是更改了profile, 不要出差错.
验证:
gcc -v
g++ -v
3. 安装sdl2 播放声音. ffplay 需要该依赖
需要添加下面的下载源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
然后:
sudo yum install SDL2-devel
下面有一大部分是源码安装
4.安装 ffmpeg-n4.4.tar.gz, 注意: 需要加colorbardetect 补丁!!
4.1:安装nasm, yum安装太旧不符合要求,源码安装. 我下载了nasm2.14
安装到了/usr/local/bin
ERROR: freetype2 not found using pkg-config” 错误
4.2: sudo yum install freetype-devel
4.3: 安装x264
ffmpeg 编译需要x264库, 需要源码安装,我下载了git 库.运行
./configure --enable-shared;make;make install 三部曲.
注意,其库放到了/usr/local/lib下,头文件在/usr/local/include
WARNING: using libx264 without pkg-config
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
4.3: ffmpeg 安装
配置:
./configure --prefix=/opt/ffmpeg_build --enable-gpl --enable-nonfree --enable-shared --enable-libfreetype --enable-libx264
make
make install
注意观察ffplay 是否编译成功!!, 解决办法是: 要有SDL库。所以要先安装sdl库
验证: 用ffmpeg, ffplay 来验证, 注意用ldd 检查, 并在ld.conf.d 中添加依赖库
5. 安装opencv-4.5.3(opencv-4.5.3.zip)
5.1: 安装cmake
由于系统cmake 2.8 版本太低,不满足要求,需手工下载源码编译安装.
我下载了cmake-3.9.2.tar.gz
解压后执行./configure
make
make install
或者: bootstrap, gmake, sudo make install
执行cmake 前,先执行$hash -r, 否则会提示can not find "CMAKE_ROOT"
5.2: 安装opencv
先建立build 目录,在该目录下执行
cmake -DCMAKE_INSTALL_PREFIX=/opt/opencv
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_CXX11=ON \
-DBUILD_PERF_TESTS=OFF \
-DWITH_XINE=ON \
-DBUILD_TESTS=OFF \
-DENABLE_PRECOMPILED_HEADERS=OFF \
-DCMAKE_SKIP_RPATH=ON \
-DBUILD_WITH_DEBUG_INFO=OFF \
-Wno-dev ../
make; make install
库及头文件在/opt/opencv
5.3: 建立一个连接, 因为centos上安装在lib64, 而ubuntu 安装在lib, 建个连接就可以统一了.
ln -s lib64 lib
6. 安装ekho 库(ekho-master.zip), 这是txt2speech 库
按照文档INSTALL 来, 还是挺简单的,从./autogen.sh 开始。不过文档有一处有误。也容易解决。
configure: error: sndfile test failed 解决方法 $yum install libsndfile-devel
configure: error: espeak-ng test failed
解决方法:
libspeak-ng-dev 需要源码安装,我下载了 espeak-ng-1.49.0+dfsg 进行源码编译
./configure; make ; sudo make install
安装到了/usr/local/lib
configure: error: pulseaudio test failed (--without-pulseaudio to disable)
解决方法:
$yum install pulseaudio-libs-devel
./configure; make; sudo make install
头文件被安装到了/usr/local/include
lib 由于缺少其它一些东西而终止,但已经生成,可以手工copy
sudo cp -r ekho-data /usr/local/share
可以采用./configure --prefix=/opt/ekho 方式,安装时会整齐一些,但安装由于makefile 有些错误
需要手工操作, 最后/ekho-data 数据也应该移动到/usr/local/share 下, 运行时是从这个目录读取的。
最终的使用:
/usr/local/include/ekho.h:30:10: fatal error: config.h: 没有那个文件或目录
编译的config.h 要放到一个已知的位置, 还有sonic.h utf8目录等。
我建立了/opt/ekho/include 目录, 把需要的头文件都放这里了.
另建立/opt/ekho/lib 目录, 把libekho.a 库文件放这里.
另外,pinyin.index 及pinyin.voice 是第一次发声时形成的,把pinyin目录下的文件进行打包合成。
并不是编译形成的文件,我为此甚是奇怪了一阵子这个文件到底是怎么来的!!
问题:
qopengl.h:141:22: 致命错误:GL/gl.h:没有那个文件或目录
解决方法:
sudo yum install mesa-libGL-devel
乙: 准备运行前,用ldd multiview 看一看, 是否动态库都能找到.
ldd是list, dynamic, dependencies的缩写, 意思是, 列出动态库依赖关系
发现opencv 库没有找到, 在/etc/ld.conf.d/ 下建立一个文件包含上该路径
/opt/opencv/lib64
然后sudo ldconfig
这样ldd 就通过了.
2. 运行先执行本地文件.再执行网络文件.
LOG: Error -2 while encoder interlease write frame: 没有那个文件或目录
录制没有建立起目录,其根是/media, 可手工创建并赋予写权限.
本地文件可播放,网络流无法播放,发现是防火墙原因,坑人,关闭之.
$systemctl status firewalld.service
$systemctl stop firewalld.service
$systemctl disable firewalld.service