使用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/"
为了避免以后碰到类似的情况,编译程序时请尽量使用动态库。

本文介绍了在使用GCC编译程序时遇到的undefined reference to '__ctype_b'错误的原因及解决方法。此错误源于新版本glibc移除了与旧locale模型冲突的符号定义。文章提供了兼容旧版编译器和C库的配置示例,并建议使用动态库来避免类似问题。
2465

被折叠的 条评论
为什么被折叠?



