c - 编译文件时出错 |收集 2 : error: ld returned 1 exit status

标签 c linux gcc makefile

我遇到了很多问题,似乎无法理解正在发生的事情。我正在尝试从 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/

相关文章:

c - 我应该将参数存储类说明符放在函数定义中还是同时放在声明和定义中?

c - 如何释放使用 mmap 分配的内存?

c - 想要在关闭使用 freopen 打开的文件后写入 stdout

C Guard 不能按预期与 rlutil.h 一起工作

c - 为什么 GCC 声明 clock_gettime() 隐式声明,但预处理器对相关宏非常满意?

c++ - .exe 文件中的数据段有哪些限制?

Linux,如何使用目录名创建文件?

linux - Elf header - 段的重复

linux - Semaphore 和 R/W Semaphore 的性能评估

c - subq $40 %rsp 与 AS 崩溃但 GCC 没有