c - cc(文件名).c -l(库名)-o(输出文件名)有什么作用?为什么它可以工作,而 make 却不能?

标签 c import include cs50

我开始接触 c 编程,并在 cs50 平台上参加了一系列讲座,由于我的互联网出现一些问题,我决定下载该库是有意义的,这样我就可以在离线时处理问题集,之后下载库并将其包含在项目中 make 命令根本不起作用,给我这个输出

cc main.c -o main /tmp/ccz5QZev.o: In function main': main.c:(.text+0x18): undefined reference toget_string' collect2: error: ld returned 1 exit status : recipe for target 'main' failed make: *** [main] Error 1

get_string 是在#include“libcs​​50-develop/src/cs50.h”上定义的,有人告诉我运行“cc main.c -lcs50 -o main”而不是“make”可以解决问题,建议确实有效,但我无法再次联系该人以找出原因。有人可以向我解释发生了什么吗?

最佳答案

您的调用执行两个步骤:编译和链接。

您收到的错误来自链接器尝试绑定(bind) header cs50.h 中声明的符号时的链接步骤

必须有一个库文件也需要包含在编译中。

这似乎是您收到的建议,我同意。问题可能是链接器需要知道库“cs50”位于路径中的位置。

这通常是在进一步切换到链接器时指示的,以告诉链接器库所在的位置。

对于 gcc 编译器,使用 -L 开关指示搜索库的目录。 (see options)

关于c - cc(文件名).c -l(库名)-o(输出文件名)有什么作用?为什么它可以工作,而 make 却不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46635878/

相关文章:

c++ - 查找 include 指令使用了哪个文件

c - qsort 段错误结构

java - 使用 gradle 从 java 项目中删除未使用的导入

java - ruby 'require' 与 Java 'import'

c - 如何在大型 C 代码库中创建头文件?

c# - LINQ To Entities Include + Where 方法

c - 管理日志文件大小

c - 语法错误 : missing ';' before 'type'

c - C 中的 Posix 正则表达式错误

javascript - ES6 导入语句的好处