Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

快速“脏”移植autoconf应用

From Wiki
Jump to: navigation, search
Article Metadata

文章
dougcn 在 07 Jun 2008 创建
最后由 hamishwillee 在 15 Dec 2011 编辑

快速“脏”移植autoconf应用

本文译自: Quick and dirty porting of autoconf apps

Contents

介绍

随着OpenC plugin的发布,将现有的开源项目移植到Symbian OS变得更容易了。下面以使用autotools开发的开源项目为例,说明如何快速将其改造成一个Symbian项目。

我将使用libxml2[1]作为样例项目,但这些步骤一般来说也适合任何项目。

任务1: 为项目构造一个bld.inf文件

移植软件到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"命令导出头文件。

任务2: 构造一个MMP文件

为你的项目创建一个空的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

任务3: 自定义config.h.symbian

现在将完成的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文件。

任务4: 编译与修改

现在编译项目。若编译失败,那么就修改编译错误。显然,这随应用不同而不同,因此对这个没有什么特别的建议。libxml2编译完好。

任务5: 运行于调试

现在运行应用程序,或使用该库的应用程序。再次,你可能碰到错误,但这个指导建议不了具体的修改措施。

完成

就是这些了。现在你应该有一个可工作的Symbian可执行文件或库了。从始至终,libxml2花了半小时到1小时时间导出。

希望能有所帮助。

See Also

This page was last modified on 15 December 2011, at 06:37.
166 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×