看到一篇关于`__ctype_b'的文章,没看懂,请高手解读
关于link error"straits.h:120: undefined reference to `__ctype_b' "
使用别人的.a ,连接的时候发现错误
straits.h:120: undefined reference to `__ctype_b'.
百度了一下,发现不少人遇到这个问题,觉得贴出来,共享下
原因:
__ctype_b出现在xlocale.h这个文件里面
21 #ifndef _XLOCALE_H
22 #define _XLOCALE_H 1
23
24 /* Structure for reentrant locale using functions. This is an
25 (almost) opaque type for the user level programs. The file and
26 this data structure is not standardized. Don't rely on it. It can
27 go away without warning. */
28 typedef struct __locale_struct
29 {
30 /* Note: LC_ALL is not a valid index into this array. */
31 struct locale_data *__locales[13]; /* 13 = __LC_LAST. */
32
33 /* To increase the speed of this solution we add some special members. */
34 const unsigned short int *__ctype_b;
35 const int *__ctype_tolower;
36 const int *__ctype_toupper;
37 } *__locale_t;
38
39 #endif /* xlocale.h */
这个文件只有在旧的libc.a里面才有.所以你在使用旧的编译器编译的库,而自己使用的新的编译器是没有的.
解决:
找一个新的机器(不同版本的c库)
先
**@**:/usr/local$ grep xlocale.h /usr/lib/lib*
Binary file /usr/lib/libBrokenLocale.a matches
Binary file /usr/lib/libBrokenLocale.so matches
Binary file /usr/lib/libBrokenLocale_p.a matches
Binary file /usr/lib/libanl.a matches
Binary file /usr/lib/libanl.so matches
Binary file /usr/lib/libanl_p.a matches
Binary file /usr/lib/libc.a matches
OK,重新编译就可以了.
弄了半天,多谢benny和coon,终于搞定了.
引用于:http://blog.donews.com/linlab/archive/2006/03/09/760214.aspx
[ 本帖最后由 jqtony 于 2008-8-6 20:01 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
按照他的意思,换个版本低点的吧。
a文件不一定可以跨平台的