Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1138720
  • 博文数量: 53
  • 博客积分: 10025
  • 博客等级: 上将
  • 技术积分: 1640
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-15 17:05
文章分类

全部博文(53)

文章存档

2011年(1)

2010年(3)

2009年(25)

2008年(24)

我的朋友

分类:

2009-03-08 01:40:01

各种依存关系包都已装上,编译Xorg时出现错误:
??ftfuncs.c:54:10: #include expects "FILENAME" or
??ftfuncs.c:56:10: #include expects "FILENAME" or
??ftfuncs.c:57:10: #include expects "FILENAME" or
??ftfuncs.c: In function `FreeTypeOpenInstance':
??ftfuncs.c:464: error: `TT_Face' undeclared (first use in this function)
??ftfuncs.c:464: error: (Each undeclared identifier is reported only once
??ftfuncs.c:464: error: for each function it appears in.)
??ftfuncs.c:464: error: parse error before "tt_face"
??ftfuncs.c:468: error: `SFNT_Service' undeclared (first use in this function)
??ftfuncs.c:468: error: parse error before "sfnt"
??ftfuncs.c:469: error: `tt_face' undeclared (first use in this function)
??ftfuncs.c:469: error: parse error before "face"
??ftfuncs.c:483: error: `sfnt' undeclared (first use in this function)
??ftfuncs.c:483: error: parse error before "tt_face"
??ftfuncs.c: In function `tt_get_metrics':
??ftfuncs.c:812: error: `TT_LongMetrics' undeclared (first use in this function)
??ftfuncs.c:812: error: parse error before "longs_m"
??ftfuncs.c:821: error: `longs_m' undeclared (first use in this function)
??ftfuncs.c:821: error: parse error before "header"
??ftfuncs.c:826: error: `TT_ShortMetrics' undeclared (first use in this function)
??ftfuncs.c:826: error: parse error before ')' token
??ftfuncs.c:827: error: parse error before "header"
??ftfuncs.c: In function `ft_get_very_lazy_bbox':
??ftfuncs.c:842: error: `TT_Face' undeclared (first use in this function)
??ftfuncs.c:842: error: parse error before "ttface"
??ftfuncs.c:849: error: `ttface' undeclared (first use in this function)
??ftfuncs.c: In function `FT_Do_SBit_Metrics':
??ftfuncs.c:911: error: `SFNT_Service' undeclared (first use in this function)
??ftfuncs.c:911: error: parse error before "sfnt"
??ftfuncs.c:912: error: `TT_Face' undeclared (first use in this function)
??ftfuncs.c:915: error: `TT_SBit_Strike' undeclared (first use in this function)
??ftfuncs.c:915: error: parse error before "strike"
??ftfuncs.c:916: error: `TT_SBit_Range' undeclared (first use in this function)
??ftfuncs.c:917: error: `TT_SBit_MetricsRec' undeclared (first use in this function)
??ftfuncs.c:928: error: `face' undeclared (first use in this function)
??ftfuncs.c:928: error: parse error before "ft_face"
??ftfuncs.c:929: error: `sfnt' undeclared (first use in this function)
??ftfuncs.c:929: error: parse error before "face"
??ftfuncs.c:934: error: `range' undeclared (first use in this function)
??ftfuncs.c:934: error: `strike' undeclared (first use in this function)
??ftfuncs.c:951: warning: implicit declaration of function `FT_STREAM_POS'
??ftfuncs.c:954: warning: implicit declaration of function `FT_STREAM_SEEK'
??ftfuncs.c:957: error: `elem_metrics' undeclared (first use in this function)
??make[5]: *** [ftfuncs.o] Error 1
??make[5]: Leaving directory `/sources/xcbuild/lib/font/FreeType'
??make[4]: *** [FreeType] Error 2
??make[4]: Leaving directory `/sources/xcbuild/lib/font'
??make[3]: *** [all] Error 2
??make[3]: Leaving directory `/sources/xcbuild/lib'
??make[2]: *** [all] Error 2
??make[2]: Leaving directory `/sources/xcbuild'
??make[1]: *** [World] Error 2
??make[1]: Leaving directory `/sources/xcbuild'
??make: *** [World] Error 2
??
??提示错误的是ftfuncs.c有多个未定义的数据类型,另外还指示了54、56、57三行包含的头文件有问题,应该就是没有include这三个头文件,以致后面的错误
??
??下面一步步跟踪,首先看看ftfuncs.c在哪里:
??# find . -name "ftfuncs.c"
??./lib/font/FreeType/ftfuncs.c
??
??看看它54、56、57行到底写了什么:
??# vi ./lib/font/FreeType/ftfuncs.c
??定位到54行,原来这几行是:
??54: #include FT_INTERNAL_TRUETYPE_TYPES_H
??56: #include FT_INTERNAL_SFNT_H
??57: #include FT_INTERNAL_STREAM_H
??
??原来在ftfuncs.c里,这三个头文件是用宏定义表示的,究竟是什么呢?使用下面命令查找来源:
??# find . -name "*" | xargs grep FT_INTERNAL_TRUETYPE_TYPES_H
??# find . -name "*" | xargs grep FT_INTERNAL_SFNT_H
??# find . -name "*" | xargs grep FT_INTERNAL_STREAM_H
??
??结果中会有这么几行:
??./extras/freetype2/include/freetype/internal/internal.h:#define FT_INTERNAL_TRUETYPE_TYPES_H
??./extras/freetype2/include/freetype/internal/internal.h:#define FT_INTERNAL_SFNT_H
??./extras/freetype2/include/freetype/internal/internal.h:#define FT_INTERNAL_STREAM_H
??显示这几个头文件都是在internal.h中声明的,查看该文件,它说自己是被ft2build.h包含的
??
??另外查看ftfuncs.c,的确是include了ft2build.h
??
??查找ft2build.h:
??# find . -name "ft2build.h"
??./lib/font/FreeType/module/ft2build.h
??./extras/freetype2/devel/ft2build.h
??./extras/freetype2/include/ft2build.h
??分别查看内容,无论哪一个ft2build.h,都include了ftheader.h
??
??查找ftheader.h:
??# find . -name "ftheader.h"
??./lib/font/FreeType/module/ftheader.h
??./extras/freetype2/include/freetype/config/ftheader.h
??分别查看内容,无论哪一个ftheader.h,都include了internal.h
??
??这下大概搞清楚几个文件之间的包含关系了:
??ftfuncs.c-->ft2build.h-->ftheader.h-->internal.h-->tttypes.h,sfnt.h,ftstream.h
??够复杂的了。可是,为什么到最后不能找到头文件呢?难道是路径有问题?
??
??ftfuncs.c里包含ft2build.h用的是include <>,也就是说,使用标准方式,到存放C库函数头文件所在的目录中寻找要包含的文件。于是找到编译ftfuncs.o时的语句:
??gcc -m32 -c -ansi -Wall -Wpointer-arith -Wundef -I/usr/include/freetype2 -I/usr/include/freetype2/config -I. -I../../../include/fonts -I../include -I../../../exports/include/X11 -I../../../programs/Xserver/include -I../../../exports/include -I../../.. -I../../../exports/include -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DFUNCPROTO=15 -DNARROWPROTO -DGCCUSESGAS -DAVOID_GLYPHBLT -DPIXPRIV -DSINGLEDEPTH -DXFreeXDGA -DXvExtension -DXFree86LOADER -DDLOPEN_HACK -DXFree86Server -DXF86VIDMODE -DXvMCExtension -DSMART_SCHEDULE -DBUILDDEBUG -DXResExtension -DX_BYTE_ORDER=X_LITTLE_ENDIAN -DXORG_VERSION_CURRENT="(((6) * 10000000) + ((9) * 100000) + ((0) * 1000) + 0)" -DXFREE86_FT2 -O2 -fno-strength-reduce -fno-strict-aliasing ftfuncs.c -o unshared/ftfuncs.o
??
??注意包含头文件那一段,好像没有包括上述几个ft2build.h所在的路径(都在xorg安装路径下),把上述几个ft2build.h改名为ft2build.h.bak再执行上面那句编译,也没说找不到ft2build.h,说明确实是存在另一个ft2build.h,而这个ft2build.h又没有正确include所需要的头文件
??
??注意到上面的编译语句设定的路径还有/usr/include/freetype2和/usr/include/freetype2/config,于是在/usr目录下找:
??# find /usr -name "ft2build.h"
??/usr/include/ft2build.h
??把它改名为ft2build.h.bak,再用上面的语句编译ftfuncs.c,果然说找不到ft2build.h了
??
??继续查找其它需要的头文件:
??# find /usr -name "ftheader.h"
??/usr/include/freetype2/freetype/config/ftheader.h
??
??# find /usr -name "internal.h"
??/usr/include/pci/internal.h
??/usr/include/php/ext/pcre/pcrelib/internal.h
??(看路径和文件内容,这两个与xorg风马牛不相及)
??
??另外三个:tttypes.h、sfnt.h、ftstream.h,更是不存在于/usr目录
??
??现在知道问题在哪里了:编译程序找不到internal.h及其包含的头文件,经研究后执行:
??# cp -rv ./extras/freetypes/include/freetype/* /usr/include/freetype2/freetype
??也就是把头文件拷贝过去,执行上面的编译语句,没有问题,重新编译xorg,也OK了
??
??其实我在安装xorg前是装好了freetype的,但就是不明白为什么缺了那几个头文件,看看网上,同样的问题也不少,现在也不清楚这样处理是否有什么后遗症,反正过了再说吧
阅读(1834) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~