在路上...

The development of life
我们一直都在努力,有您的支持,将走得更远...

站内搜索: Google

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  使用GCC编译程序时,如果链接到一些比较老的静态库,经常会碰到这个错误:undefined reference to '__ctype_b'

这是一个兼容性错误,这个错误出现的原因是,在glibc 2.3.2-11及其之后的C库版本,移除了__ctype_b和相关symbal的定义,因为它和新locale模型存在冲突无法并存,这意味着使用Redhat 7.3编译的C静态库,没有办法在RedHat 9及之后的版本保持二进制兼容(这些symbal在RedHat 8中曾经移除,但后来又重新加入了),必须使用新的编译器重新编译这些旧的库文件。

如果没有这些库的源代码,又不再使用Redhat Linux 7.3,那么只能使用折中的解决办法,在新系统中安装兼容7.3的编译器compat-gcc-7.3及C库compat-glibc-7.x,然后在Makefile中指定使用兼容编译器和C库,如:

    CC="gcc296 -I /usr/lib/i386-redhat-linux7/include -B /usr/lib/i386-redhat-linux7/lib/"

为了避免以后碰到类似的情况,编译程序时请尽量使用动态库。

posted on 2009-11-19 15:36  palam  阅读(2365)  评论(0编辑  收藏  举报