undefined reference to '__ctype_b'

使用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/"

 

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

你可能感兴趣的:(C++,Linux,reference,redhat,编译器,makefile,gcc,linux)