2008年2月14日星期四

"file is not of required architecture"

今天在XCode下编译CEGUI for mac时,链接CEGUIBase时无法链接libpcre.a,发生“file is not of required architecture”这个错误。

起因:

为了简便,我去掉了pcre.framework、freetype.framework,改为直接通过-l参数链接这些库。而pcre & freetype的库是从sourceforge上下载的,通过configure自动配之后编译生成了库文件。

当遇到这个错误的时候,很明显是由于硬件架构不一致导致链接报错,问题是为什么会架构不一致?我尝试手工修改了configure生成的pcre的Makefile,添加了-arch i386,但是没有解决问题。

然后查询了XCode中Target CEGUI的设置,architecture是i386,没有问题。

...

最后我查询了XCode中Target CEGUIBase的设置,原来它的architecture是i386 & ppc,包含了两个架构的binary,所以pcre中只提供了i386平台的binary,导致linker抱怨。(不知道为什么CEGUI在不同的target中设置不一样,虽然CEGUI这个target是一个虚的概念,不产生实际内容,但是这样还是很让人困扰)

先修改了CEGUIBase的architecure为i386,问题就解决了。

注:同时包含两个平台的binary可以以universal方法同时运行在ppc & intel平台上。我修改CEGUIBase只是让快速绕过这个问题,正解还是应该链接pcre & freetype这些库的framework。

没有评论:

发表评论