我的TCPMP编译过程

来源:互联网 发布:辐射4人物捏脸数据 编辑:程序博客网 时间:2024/06/05 03:54

最近做ce相关的开发,被同事问及播放器方面的问题,开始上网查找ce下的播放器,知道了开源的超级tcpmp播放器,从网址http://www.hpcfactor.com/downloads/tcpmp/,下载到0.72RC1的源码,阅读readme文件,准备编译。

xp sp2,工具evc+sp4,ce4.2StandardSDK,模拟器平台

参考

additionaly for AMR decoder:* AMR reference code from:   http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-610.zip http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-600.zip

additionaly for x86 or emulator build:* nasm - The Netwide Assembler (http://nasm.sourceforge.net)

下载了nasm和26104-610.zip以及26204-600.zip将26104-610.zip以及26204-600.zip解压后的文件复制到源码文件夹下的amr/26104和amr/26204下

将nasm拷贝到C:/Program Files/Microsoft eMbedded C++ 4.0/Common/Tools下

打开tcpmp.vcw,从project-dependencise.. 下可以看到每个工程的依赖关系,即编译此工程之前需要编译哪些其他工程。设置player_ce3为当前活动工程,clean后rebuild all编译开始报错,

由于我安装了avast杀毒软件,似乎avast与nasm有某种冲突,总是提示关闭忽略选项选择忽略的话nasm无法编译asm文件,选择关闭后只能编译部分asm文件其他还是错误,卸载avast之后还是不行上网查找资料虽无结果但了解了大概的程序结构,知道了编译完成后需要lang/lang_std.txt和lang/lang_chs.txt才能显示正常其他方面的信息仍然一无所知。

回过头重新整理思路,打开aac.vcp,单独编译,提示link错误,查找相关函数,发现都是common里定义的,知道需要common编译成功才能link

于是从common下手,打开common.vcp,单独编译,仍然是avast与nasm的问题,blit_mmx.asm无法编译,blit_mmx.obj不存在打算从cmd下直接运行nasm编译blit_mmx.asmcmd

进入nasm.exe所在目录执行nasm -f win32 -o blit_mmx.asm blit_mmx.obj,编译成功于是按照提示缺少的obj文件,又编译了idct_mmx.obj,mcomp_mmx.obj,x86.obj,编译好后将obj文件放到源码文件夹下的common/emulatorRel下

回到evc环境,运行build(F7),而不是rebuild all,编译成功,在源码文件夹下的emulatorRel下看到common.dll 因为全部asm已经编译通过,考虑在这个基础上继续编译player_ce3重新打开tcpmp.vcw,点build(F7),编译错误变成了一些include路径的小问题,修改后aac和ac3以及amr都编译通过,直到asap出错,提示atari.h找不到

查看错误,发现在cpu.h中

#ifdef ASAP#include "asap_internal.h"#else#include "atari.h"#endif

搜索atari.h没有,搜索asap_internal.h找到一个,在asap/atari800/src下,于是设置编译选项,加入ASAP的定义Project-Setting-选择asap,c/c++选项卡,Category选择Preprocessor,在Preprocessor definitions下加入ASAP 继续build(F7),编译通过,

到flac报错,一大堆include的文件路径问题,这里需要耐心找到具体路径修改掉,最好改一个路径build一次,改了十几处,基本都是需要将private前加include/到还剩7个错误的时候,改到format.h路径后发生85个c2491错误,提示dllimport只能用于声明,不能用于定义,双击第一个错误,跳到FLAC_API const char *FLAC__VERSION_STRING = VERSION;

查找FLAC_API的定义发现在export.h文件中的#ifdef FLAC_API_EXPORTS#define FLAC_API _declspec(dllexport)#else#define FLAC_API _declspec(dllimport)#endif去掉其他行,只留#define FLAC_API _declspec(dllexport),或者加入编译选项FLAC_API_EXPORTS再次build下去,一直顺利编译到末尾,生成的文件全部down到模拟器的windows目录下使用fileviewer上传lang_std.txt,lang_chs.txt到模拟器,

运行player_ce3,菜单无文字,考虑到默认可能是英语语言又上传lang_en.txt,重新运行player_ce3,菜单英文正常显示,播放3gp和avi还有mp3均正常。将语言更换为chenise,重启后语言改变,但由于模拟器不支持中文所以显示乱码。

网上许多人说无法编译tcpmp,其实如果没有avast捣乱的话编译过程还是很容易的,希望能帮到还没有解决这方面问题的朋友     

杨勇    

2008-5-19,11:42

原创粉丝点击