我遇到了很多问题,似乎无法理解正在发生的事情。我正在尝试从 Learn C The Hard Way 学习 C ,我正在尝试编译 first exercise .每当我运行 make 我都会遇到一个大问题
cc ex1.c -o ex1
ex1.c: In function ‘main’:
ex1.c:3:5: warning: implicit declaration of function ‘put’ [-Wimplicit-function-declaration]
put("Hello world.");
^
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/5.3.1/../../../libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /lib/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
<builtin>: recipe for target 'ex1' failed
make: *** [ex1] Error 1
任何帮助都会很棒
最佳答案
第一个错误很明显;没有名为 put()
的函数的声明。这要么是因为
- 你输错了函数名,
- 或者因为您未能通过包含声明的头文件直接提供声明。
在这种情况下,如果您尝试编译的代码来自 this exercise然后再看一遍 - 它明显不同于您的代码(即上面列出的第一种可能性)。但是即使那样你也会得到同样的错误;在练习中进一步阅读,您会发现作者故意省略了头文件,以说明对特定库头文件的需求。您在没有建议的 -Wall
命令行选项的情况下收到警告的原因可能是因为您使用的编译器版本比作者更新。老实说,从我对“艰难地学习 C”的了解来看,我会避开它。
第二个问题是您的链接器无法找到合适版本的标准 C 库来链接到您的代码。在 Linux 中编译 C 代码通常很简单;大多数发行版都已经正确安装并运行了 GCC;你的似乎坏得很厉害。您可能想要修复您的工具链安装。您可能安装了多个不兼容的工具链。
关于c - 编译文件时出错 |收集 2 : error: ld returned 1 exit status,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35493695/