【发布时间】: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标志。 -
好的,很高兴能提供帮助。