嵌入式Linux自学阶段性总结(5)

2019-07-13 00:58发布

二 移植和编译mscore-0.9.3   要成功编译,必须下载编译alsa-lib,因为该工程中调用alsa-lib的头文件,从官方网站上下载。解压后不要编译,否则会安装在主机上,我们最终是要运行在嵌入式linux上的,这里把源码中的头文件包含到mscore的编译路径中,然后交叉编译alsa-lib,得到libasound.so库文件,放到arm-linux-gcc的安装目录的lib中,交叉编译alsa-lib的脚本: CC=arm-linux-gcc ./configure -prefix="/usr/local/arm/3.4.1/arm-linux" --host=arm-linux --target=arm-linux –build=i386-linux 注意:不能有 --with-softfloat,不支持浮点运算,否则编译出错。   关于make的几个选项的理解: LDSHARED= CC_FOR_BUILD="arm-linux-gcc" CC="arm-linux-gcc" LD="arm-linux-ld" CPP="arm-linux-g++ -E" AR="arm-linux-ar rc" prefix="/usr/local/arm/3.4.1" CFLAGS="-fPIC" 其中,LD选项表示最后连接的时候,采用哪个版本的连接器。交叉编译中如果只指定了arm-linux-gcc,那么最后仍然使用主机ld,就会出现.o文件格式无法识别的问题。   然后编译mscore-0.9.3,因为该项目用到了cmake,必须在CMakeLists.txt中定义: # Added by leo to cross compile. set(CMAKE_C_COMPILER "/usr/local/arm/3.4.1/bin/arm-linux-gcc") set(CMAKE_CXX_COMPILER "/usr/local/arm/3.4.1/bin/arm-linux-g++")   project(mscore)   注意:这两行定义让cmake生成的Makefile中使用arm-linux-gcc进行编译,否则还是会使用主机的gcc.同时,前两行设定必须在project(mscore)之前,否则设置不能生效。   参考mscoreREADME,在目录下make,编译期间可能出现错误,在相应的出错代码处进行修改,或者直接注释掉。最后,在连接时,出现错误 -lasound无法找到,这是连接器ld没有知道libasound.so库文件的错误,最终解决方法是,编译完成后,手工执行连接操作,把arm-linux-ld -lasound中的-lasound或者先前编译出来的libasound的绝对路径即可。这样就生成了可执行文件mscore.   前面给出了在开发板上运行qtopia的启动脚本,运行普通的qte程序也类似,不过包含的不是qtopia的库,应该是前面编译好的qte4.4.3_arm目录下的库,把这个目录挂载或者复制到开发板系统目录中,这个目录不一定要和主机目录一样。启动脚本如下: #!/bin/sh   # created by leo feb, 10th, 2009 export set HOME=/root export set QTEDIR=/opt/qt/qte4.4.3_arm export set QWS_KEYBOARD="USB:/dev/input/event1" export set QWS_MOUSE_PROTO="Tslib:/dev/h3600_tsraw" export set QWS_SIZE=800x480 export set LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTEDIR/lib:/usr/local/arm/3.4.1/arm-linux/lib #export set QWS_DISPLAY="linuxFB:mmWidth35:mmHeight45:0" export set QWS_DISPLAY="linuxFB:mmWidth90:mmHeight110:0"   ln -s /dev/fb0 /dev/fb/0 export set TSLIB_ROOT=/opt/tslib1.4-install export set TSLIB_TSEVENTTYPE=H3600 export set TSLIB_FBDEVICE=/dev/fb0 export set TSLIB_TSDEVICE=/dev/h3600_tsraw export set TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf export set TSLIB_CONSOLEDEVICE=none export set TSLIB_CALIBFILE=/etc/pointercal export set TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts/ export set LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib   if [ -f "/etc/pointercal" ]; then export set POINTERCAL_FILE=/etc/pointercal $QTEDIR/bin/mscore -qws else $TSLIB_ROOT/bin/ts_calibrate $QTEDIR/bin/mscore -qws fi   这样,mscore终于在开发板上运行起来了,乐谱符号和字体显示正常,如意料的一样,不可能有声音,报错信息: QPainter::begin: Paint device returned engine == 0, type: 2 QPainter::end: Painter not active, aborted ALSA lib conf.c:3009:(snd_config_update_r) Cannot access file /usr/local/arm/3.4.1/arm-linux/share/alsa/alsa.conf ALSA lib pcm.c:2202:(snd_pcm_open_noupdate) Unknown PCM default Alsa_driver: Cannot open PCM device default for playback. init ALSA audio driver failed init ALSA driver failed no audio driver sequencer init failed