【发布时间】:2017-02-07 15:19:45
【问题描述】:
我有一个简单的“Hello World!” c 程序,在我的桌面上命名为 hello.c:
#include <stdio.h>
int main() {
printf("Hello world!\n");
return 0;
}
我运行以下命令。
- 我使用以下命令对其进行预处理:cpp hello.c > hello.i
- 我编译它:gcc -S hello.i
- 我把它组装成:as -o hello.o hello.s
到目前为止一切顺利。但是,我无法链接它。除其他命令外,我尝试过以下命令:
ld -o hello.exe hello.o
ld -o hello.exe hello.o -lgcc
ld -o hello.exe hello.o -nostdlib -lgcc
没有任何作用。我在每种情况下遇到的链接错误是:
hello.o:hello.c:(.text+0x9): undefined reference to `__main'
hello.o:hello.c:(.text+0x15): undefined reference to `puts'
如何链接这个汇编程序 hello.o 以最终生成可执行程序 hello.exe?我错过了什么? [使用 Windows 8.1,Mingw 版本 0.6.2。]提前致谢。
【问题讨论】:
-
gcc -o hello.exe hello.c是做什么的? “没有任何效果”不是对错误情况的非常有用的描述。 -
gcc 是编译器。该命令将完成所有工作以生成可执行文件。我一步一步走。现在我处于最后一步,我想与链接器(ld)链接。
-
你为什么要链接?这里有汇编文件吗?您的总体目标是什么(链接程序集和 C 文件?)?
-
@amanuel2:装配与这些有什么关系?无论生成它的源语言如何,您都需要链接目标代码。那很可能是 C。
-
@amanuel2 我已经提到了我想做的事情。我想链接 hello.o,以生成可执行文件。这不是链接器应该做的(在累积所有库之后)。顺便问下为什么投反对票?
标签: c windows gcc linker mingw