undefined reference to `__ctype_b_loc' 的问题

来源:互联网 发布:西安天网软件拖欠工资 编辑:程序博客网 时间:2024/05/19 00:11
从snapgear 下载下来的cross toolchain 在交叉编译XFree86的时候出现

scan.o:在函数‘xf86nameCompare’中:
scan.c:(.text+0x160):对‘__ctype_b_loc’未定义的引用
scan.c:(.text+0x180):对‘__ctype_tolower_loc’未定义的引用
scan.c:(.text+0x18c):对‘__ctype_b_loc’未定义的引用
scan.c:(.text+0x1b0):对‘__ctype_tolower_loc’未定义的引用
scan.o:在函数‘xf86getToken’中:
scan.c:(.text+0x43c):对‘__ctype_b_loc’未定义的引用
scan.c:(.text+0x470):对‘__ctype_b_loc’未定义的引用
scan.c:(.text+0x51c):对‘__strtod_internal’未定义的引用
scan.c:(.text+0x5a8):对‘__ctype_b_loc’未定义的引用
scan.c:(.text+0x5d8):对‘__ctype_b_loc’未定义的引用
collect2: ld returned 1 exit status

从网上搜索了半天,大部分人都说是引用了不同版本的glibc 造成的。在我的 /usr/local/arm-linux/lib目录下确实存在两个版本的库(libc-2.2.5.so libc-2.3.3.so),难道是这个造成的。 我在我的Xserver 里的cross.def 里CcCmd 添加如下指定连接库版本的选项就可以了
#define CcCmd /home/project/tpc66/snapgear/tools/ucfront-gcc arm-linux-gcc -I. -I./..  -I/usr/local/arm-linux/include    -L/usr/local/arm-linux/lib -ldl -lpthread -lc -lc-2.3.3 -lstdc++  -iwithprefix include
以下是一篇参考文章:
http://www.cmiss.org/cm/wiki/CrossCompilers