对Gens的裁剪

在完成Gens源代码分析之后我们对Gens源代码进行了裁剪。裁剪过程是曲折而复杂的,但对于我来说,无疑是一次很大的收获,怎样分析一个软件的内部结构,怎样将一个软件的功能与它的源代码对应起来,怎样将一个软件的结构层次化,以及怎样对一个工程进行管理。以下是裁剪工作的一个简要的概述:

  一,确定裁剪的部分功能

    CDROM 目前大部分的嵌入式手持设备都不支持光驱

    OPENGL 游戏对图形显示的要求用SDL库可以满足

    DEBUG 对于普通用户 这个功能用不到

    WIN32_UI 对于Linux操作系统 WIN32_UI部分可以删除  

工作环境和工具

    操作系统:Linux version 2.6.27.9-159.fc10.i686

    终端:GNU bash version 3.2.39(1)-release-(i386-redhat-Linux-gnu)

    编译工具:gcc version 4.3.2

    工程管理工具集:autotools

    三,裁剪和修改过程

   1裁剪和修改代码

   被删除的文件:

   /src/mp3_dec/*/src/gens/netplay/* /src/gens/debugger/*

   /src/gens/ui/win32/*/src/gens/video/v_draw_sdl_gl.cpp

   /src/gens/input/input_win32_keys.h/src/gens/video/v_draw_sdl_gl.hpp

   /src/gens/emulator/g_main_win32.hpp/src/gens/emulator/g_main_win32.cpp

   被修改的文件:

   /pixmaps/Gens2.ico/src/gens目录下除gens_core之外的几乎所有文

   2,编译过程

   在编译开始之前先来了解一下auto tools这是对具体工程进行管理的工具集,包括以下工具:automake autoscanaclocalautoheaderautoconf等工具。 

具体过程如下:

      1 编写每个目录下的Makefile.am

       如:./Makefile.am

       AUTOMAKE_OPTIONS = foreign

//Automake 主要是帮助开发 GNU 软件的人员来维护软件,所以在执行Automake 时,会检查目录下是否存在标准GNU软件应具备的文件,例如 'NEWS''AUTHOR' 'ChangeLog' 等文件.设置为foreig时,Automake会改用一般软件的标准来检查。

       SUBDIRS = src pixmaps xdg//表明有几个子目录需要被编译

 

       BUILT_SOURCES =

 

       CLEANFILES =

 

       include $(srcdir)/git_version.am

 

       love:

 

               @echo What is love?

 

               @echo Baby don/'t hurt me.

 

               @echo Don/'t hurt me.

 

               @echo No more.

 

      2autoscan提取每个目录下的文件信息生成文件configure.scan修改configure.scan把它改名为configure.in.这是autoconf的模板文件包含了工程的配置信息。

      3aclocalconfigure.in里的用到的宏拷贝到工程里来结果生成 autom4te.cache这是一个临时目录只是用来加快宏展开的。aclocal.m4 configure.in中用到的宏的定义。

      4autoheader生成config.h.in这是config.h的模板文件配置头文件(config.h)是用来定义在C/C++程序中可以引用的宏像模块的名称和版本号哈希表等等。

      5)创建几个必要的文件。

u      README:描述模块的功能、用法和注意事项等。

u      NEWS:描述模块最新的动态。

u      AUTHORS:模块的作者及联系方式。

u      ChangeLog:记录模块的修改历史,它有固定的格式。 

      6)用autoconf调用m4展开configure.in中的宏,生成configure脚本,这个脚本是最终运行的脚本。

      7)调用automake以每个目录下Makefile.am为模板产生相应的Makefile.in文件

      8)调用./configure以每个目录下的Makefile.in为模板生成相应的Makefile 

      3,最后的调试过程如下:

Make时出现四类错误

     1文件找不到[1]

       In file included from ./ui/gtk/gens/gens_window.hpp:53

       from ui/common/gens/gens_menu_callbacks.cpp:31:

 ./macros/hashtable.hpp:35:29: tr1/unordered_map: 没有那个文件或目录

      原因:gcc 3.4.0 中的哈希表不是 tr1/unordered_map

      解决:换成 gcc 4.3.2

     2,汇编出错[1]

     gens_core/gfx/blit_hq2x_16.asm:1959: error: phase error detected at end of assembly.

     原因:汇编出现的错误

     解决:将那一行的汇编代码NASM = /usr/bin/nasm -O3改为NASM = /usr/bin/nasm -O1 

    3),Makefile中宏的错误[3]

     make[4]: Entering directory `/home/lc/gens-cut1/src/gens'

     test -z "/usr/local/bin" || @MKDIR_P@ "/usr/local/bin"

     /bin/sh: @MKDIR_P@: command not found

     原因:@MKDIR_P@没有替换的对象

     解决:将/src/gens/Makefile中的MKDIR_P = @MKDIR_P@ 修改为MKDIR_P = mkdir -p --,并删除mkdir_p=mkdir -p --.

     相同的错误出现在/pixmaps/xdg的编译过程中,处理方法同上。 

    4),文件内部出错[42]

      由于裁剪过程中删除了部分的文件,但这些文件有可能包含在其他文件的头文件中,当编译那些文件时,就会出错:XX文件找不到,XX 变量未定义。

     解决:找到相应的位置删除那些变量和相应的头文件的包含语句。

四,结果(略)

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值