快速“脏”移植autoconf应用
本文译自: Quick and dirty porting of autoconf apps
Contents[hide]
|
随着OpenC plugin的发布,将现有的开源项目移植到Symbian OS变得更容易了。下面以使用autotools开发的开源项目为例,说明如何快速将其改造成一个Symbian项目。
我将使用libxml2[1]作为样例项目,但这些步骤一般来说也适合任何项目。
移植软件到Symbian OS的首要任务是书写一个bld.inf文件。对于象libxml2这样的库,将会导出所有适当的头文件到/epo32/include下的目录树,以及一个自定义的config.h文件。
打开适当的Makefile.am文件,然后定位导出的头文件列表。在libxml2,就是:
xmlinc_HEADERS = /
SAX.h /
entities.h /
encoding.h /
parser.h /
/* ... etc ... */
拷贝粘贴这些内容到你的bld.inf文件,在PRJ_EXPORTS的下面。重写每一行导出到/epoc32/include下的一个适当的子目录。在这个例子中,我们将导出到/epoc32/include/libxml目录,如下:
PRJ_EXPORTS
../include/libxml/SAX.h libxml/SAX.h
../include/libxml/entities.h libxml/entities.h
../include/libxml/encoding.h libxml/encoding.h
../include/libxml/parser.h libxml/parser.h
/* ... etc ... */
现在,创建一个config.h.in文件的拷贝,起名为config.h.symbian,然后再添加一个导出项,如下:
../config.h.symbian libxml/config.h
现在,导出完成了。从命令行,键入"bldmake bldfiles"并执行,然后再执行"abld export"命令导出头文件。
为你的项目创建一个空的MMP文件,然后添加MMP文件头,如下:
TARGET libxml2.dll
TARGETTYPE dll
UID 0x1000008d 0xDEADBEEF
VENDORID 0
上面0xDEADBEEF应以你从Symbian Signed申请的UID替代。现在,再次在Makefile.am文件中查找项目源代码文件列表。对于libxml2来说,如下:
libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c /
parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c /
/* ... etc ... */
拷贝粘贴这个到你的MMP文件,然后每一个改造成SOURCE行。如下:
SOURCEPATH ../
SOURCE SAX.c
SOURCE entities.c
SOURCE encoding.c
SOURCE error.c
SOURCE parserInternals.c
SOURCE parser.c
SOURCE tree.c
/* ... etc ... */
现在,添加一些系统头文件路径。至少需要stdapis目录,然后是你导出所有项目头文件的那个文件夹。如下所示:
SYSTEMINCLUDE /epoc32/include
SYSTEMINCLUDE /epoc32/include/stdapis
SYSTEMINCLUDE /epoc32/include/libxml
然后,添加libraries行将项目链接到libc,接着是指定一些能力(capabilities),就完成了。
对于一些项目来说,定义宏HAVE_CONFIG_H也许是必须的,以便引用config.h文件。libxml项目用不着这个,但要完成这个的话,在你的MMP文件包含这一行:
MACRO HAVE_CONFIG_H
现在将完成的MMP文件导入你喜欢的IDE。下一步我们需要给Symbian平台自定义config.h。对于config.h中的每一项,你需要决定它合适Symbian与否。有一些项是很容易判断的。比如,象这些:
#undef HAVE_FCNTL_H
我们知道Symbian有这个宏定义,那就可以改为:
#define HAVE_FCNTL_H 1
其他的不那么简单,它们控制应用程序的行为。若你不确信config.h中的定义做了些什么,那就在代码中搜索它,阅读使用它的上下文,然后决定它是该on还是off。
一旦完成,记住再次导出以便更新/epoc32/include下的config.h文件。
现在编译项目。若编译失败,那么就修改编译错误。显然,这随应用不同而不同,因此对这个没有什么特别的建议。libxml2编译完好。
现在运行应用程序,或使用该库的应用程序。再次,你可能碰到错误,但这个指导建议不了具体的修改措施。
就是这些了。现在你应该有一个可工作的Symbian可执行文件或库了。从始至终,libxml2花了半小时到1小时时间导出。
希望能有所帮助。
No related wiki articles found