cc(文件名).c -l(库名)-o(输出文件名)是做什么的,为什么它在 make 不起作用时起作用?

What does cc (file name).c -l(library's name) -o (output file name) do and why does it work when make doesnt?

我开始接触 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 "libcs50-develop/src/cs50.h" 上定义的,有人告诉我 运行 "cc main.c -lcs50 -o main" 而不是 "make" 可以解决问题,建议确实有效,但我无法再次联系此人以找出原因。有人可以向我解释发生了什么吗?

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

当链接器试图绑定在 header cs50.h

中声明的符号时,您收到的错误来自链接步骤

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

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

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

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