【问题标题】:gcc returning tons of errors in a tiny hello world programgcc 在一个小小的 hello world 程序中返回大量错误
【发布时间】:2011-12-02 15:01:09
【问题描述】:

我有点难过。这是我从 gcc 得到的错误

gcc -lm -g -o bin/tomashell obj/tomashell.o obj/tomashell.o:在函数“_start”中: (.text+0x0): `_start' 的多重定义 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 0 有无效的符号索引 12 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 1 有无效的符号索引 13 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 2 有无效的符号索引 2 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 3 有无效的符号索引 2 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 4 有无效的符号索引 12 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 5 有无效的符号索引 14 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 6 有无效的符号索引 14 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 7 有无效的符号索引 14 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 8 有无效的符号索引 2 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 9 有无效的符号索引 2 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 10 的符号索引 13 无效 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 11 有无效的符号索引 14 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 12 有无效的符号索引 14 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 13 的符号索引 14 无效 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 14 有无效的符号索引 14 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 15 有无效的符号索引 14 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 16 有无效的符号索引 14 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 17 的符号索引 14 无效 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 18 有无效的符号索引 14 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 19 有无效的符号索引 14 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 20 的符号索引 14 无效 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 21 有无效的符号索引 14 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): 重定位 22 有无效的符号索引 22 /usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_line): 重定位 0 有无效的符号索引 2 /usr/lib/gcc/i486-linux-gnu/4.4.5/../../../../lib/crt1.o:/build/buildd-eglibc_2.11.2-10-i386-GapcyD/ eglibc-2.11.2/csu/../sysdeps/i386/elf/start.S:119:首先在这里定义 obj/tomashell.o:(.rodata+0x0): `_fp_hw' 的多重定义 /usr/lib/gcc/i486-linux-gnu/4.4.5/../../../../lib/crt1.o:(.rodata+0x0): 这里首先定义 obj/tomashell.o:在函数“_fini”中: (.fini+0x0): `_fini' 的多重定义 /usr/lib/gcc/i486-linux-gnu/4.4.5/../../../../lib/crti.o:(.fini+0x0): 这里首先定义 obj/tomashell.o:(.rodata+0x4): `_IO_stdin_used' 的多重定义 /usr/lib/gcc/i486-linux-gnu/4.4.5/../../../../lib/crt1.o:(.rodata.cst4+0x0):这里首先定义 obj/tomashell.o:在函数“__data_start”中: (.data+0x0): `__data_start' 的多重定义 /usr/lib/gcc/i486-linux-gnu/4.4.5/../../../../lib/crt1.o:(.data+0x0): 这里首先定义 obj/tomashell.o:在函数“__data_start”中: (.data+0x4): `__dso_handle' 的多重定义 /usr/lib/gcc/i486-linux-gnu/4.4.5/crtbegin.o:(.data+0x0): 这里首先定义 obj/tomashell.o:在函数“_init”中: (.init+0x0): `_init' 的多重定义 /usr/lib/gcc/i486-linux-gnu/4.4.5/../../../../lib/crti.o:(.init+0x0): 这里首先定义 /usr/lib/gcc/i486-linux-gnu/4.4.5/crtend.o:(.dtors+0x0): `__DTOR_END__' 的多重定义 obj/tomashell.o:(.dtors+0x4): 首先定义在这里 collect2: ld 返回 1 个退出状态 make: *** [bin/tomashell] 错误 1

这是我的整个代码文件:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    printf("Hello, world!");
}

我一点也不知道为什么这不能编译。我正在编译所有其他 C 应用程序。

【问题讨论】:

  • 您的编译器调用是什么样的?看起来您的目标文件中可能包含一些您不想要的东西。它似乎有 _start 的事实,似乎你可能已经将它编译成一个可执行文件,而不是文件扩展名似乎表明的一个简单的目标文件。
  • 向我们展示创建 obj/tomashell.o 的命令,您可能在编译该源文件时忘记了 -c 标志。
  • 好的,很高兴能提供帮助。

标签: c gcc


【解决方案1】:

obj/tomashell.o 不是目标文件,而是可执行文件。您可能在编译时忘记使用-c,因此(默认)gcc 输出的是可执行文件而不是目标文件。

【讨论】:

    猜你喜欢
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2021-02-04
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多