CS50课程第一周Linux环境C程序编译报错问题求助
报错根因
这个undefined reference to 'get_int'属于链接阶段错误:CS50库已经安装完成的前提下,报错是因为默认执行cc calculator.c -o calculator编译时,编译器不会自动链接CS50动态库,无法找到get_int等CS50专属函数的实现,最终链接失败。
解决方法
单次编译临时解决
编译命令末尾追加CS50库链接参数即可:
cc calculator.c -o calculator -lcs50
-lcs50参数的作用是告知链接器,编译时需要把libcs50库文件链接到生成的程序中。如果习惯用gcc/clang编译,只需要替换命令开头的编译器名,保留-lcs50参数即可。
永久配置免加参数
如果不想每次编译CS50相关代码都手动追加参数,可以配置shell别名,让编译器执行时自动带上链接参数:
- 打开当前用户的bash配置文件:
nano ~/.bashrc - 滑动到文件最末尾,添加两行别名配置:
alias cc='cc -lcs50' alias gcc='gcc -lcs50' - 按快捷键
Ctrl+O,按回车确认保存路径,再按Ctrl+X退出编辑器,执行以下命令让配置立即生效:source ~/.bashrc
配置完成后,直接执行make calculator或者原生的cc编译命令,都不会再触发该链接错误。
异常排查
如果追加-lcs50参数后仍然报错,先验证CS50库是否被系统正确识别,执行命令:
ldconfig -p | grep cs50
- 若输出包含
libcs50.so的文件路径,说明库安装正常,检查编译命令的参数拼写即可 - 若无任何输出,说明之前的CS50库安装未完成,先执行
sudo apt install build-essential安装编译依赖,重新编译安装CS50库后,执行sudo ldconfig刷新系统库缓存即可。
内容的提问来源于stack exchange,提问作者Debede
相关产品推荐
相关产品推荐

