看到一篇关于`__ctype_b'的文章,没看懂,请高手解读

发布于 2022-09-20 13:40:21 字数 2725 浏览 11 评论 0

关于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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

和影子一齐双人舞 2022-09-27 13:40:21

按照他的意思,换个版本低点的吧。
a文件不一定可以跨平台的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文