WSL1 Ubuntu下Make编译C代码时CS50库函数引用缺失求助
解决WSL下make编译CS50库缺失链接的问题
问题核心是你用的默认Makefile没给编译命令加上CS50库的链接参数-lcs50,手动gcc命令加了该参数所以编译正常,给你两种解决办法:
方法1:修改Makefile
直接调整Makefile里的编译命令,补上链接参数:
把原来的:
cc test.c -o test
改成:
cc test.c -o test -lcs50
要是想让Makefile更规范、方便后续扩展,也可以用变量管理编译参数:
# 指定编译器 CC = gcc # 可选编译选项:添加警告提示,提前发现代码问题 CFLAGS = -Wall -Wextra # 链接选项:指定要链接的CS50库 LDFLAGS = -lcs50 # 编译目标规则 test: test.c $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
方法2:设置全局环境变量(一劳永逸)
如果不想每次写Makefile都手动加参数,可以把链接选项加入环境变量,让make的默认编译规则自动调用:
- 打开终端,编辑
~/.bashrc配置文件:nano ~/.bashrc - 在文件末尾添加一行:
export LDFLAGS="-lcs50" - 保存退出后,让配置立即生效:
source ~/.bashrc
之后再执行make test,编译命令会自动带上-lcs50参数,就能正常通过了。
补充说明:get_string是CS50库提供的函数,编译时必须告诉链接器去查找这个库的实现代码,-lcs50就是用来指定链接CS50库的参数,默认的make规则没包含这个参数,所以会报“未定义引用”的错误。
内容的提问来源于stack exchange,提问作者Captain Nemo
相关产品推荐
相关产品推荐

