编译MIT Kerberos krb5-1.18.2遇未初始化变量及编译选项错误求助
解决Oracle Linux 6编译krb5-1.18.2的make错误
你遇到的问题完全是老版本GCC(Oracle Linux 6默认是GCC 4.4)和krb5-1.18.2代码的兼容性问题,下面是具体的修复步骤:
1. 修复未初始化变量编译错误
错误提示里的r1stamp和r2stamp未初始化,是因为老GCC的变量初始化检查比新版本更严格——哪怕后续代码会给变量赋值,编译器也会判定为“可能未初始化”并报错。咱们手动给变量加初始值就能解决:
- 打开文件
src/lib/krb5/rcache/rc_file2.c - 找到
k5_rcfile2_store函数里的变量声明行:krb5_timestamp r1stamp, r2stamp; - 修改成带初始值的版本:
krb5_timestamp r1stamp = 0, r2stamp = 0; - 保存文件即可。
2. 移除老GCC不支持的编译器选项
错误里的cc1: warning: unrecognized command line option "-Wno-maybe-uninitialized",是因为-Wno-maybe-uninitialized是GCC 4.6及以上版本才支持的选项,Oracle Linux 6的GCC 4.4根本不认识它,咱们得把这个选项去掉:
方法一:直接修改Makefile
- 进入
src/lib/krb5/rcache/目录,打开Makefile - 搜索
-Wno-maybe-uninitialized,找到后直接删除这个选项 - 保存Makefile
方法二:重新configure时覆盖CFLAGS
如果不想改Makefile,也可以在configure阶段直接指定兼容的CFLAGS,跳过自动添加的不兼容选项:
make clean ./configure CFLAGS="-O2 -g -Wall"
这个命令会用咱们指定的CFLAGS覆盖默认设置,避免加入老GCC不认识的选项。
3. 重新编译
做完上面的修改后,清理之前的编译产物再重新编译:
make clean make
这样应该就能顺利编译完成了。
额外提示:Oracle Linux 6是比较老的发行版,建议你确认已经安装了krb5编译所需的所有依赖包,比如zlib-devel、openssl-devel、libselinux-devel这些,避免后续出现其他编译问题。
内容的提问来源于stack exchange,提问作者FrankStein
相关产品推荐
相关产品推荐

