如何使用 Mingw GCC link Windows 中的简单程序
How to link a simple program in Windows with Mingw GCC
我的桌面上有一个简单的 "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
- 我 assemble 它与 : as -o hello.o hello.s
到目前为止一切都很好。但是,我无法 link 它。除了其他命令外,我已经尝试过这些:
ld -o hello.exe hello.o
ld -o hello.exe hello.o -lgcc
ld -o hello.exe hello.o -nostdlib -lgcc
没有任何效果。我在每个案例中遇到的 link 错误是:
hello.o:hello.c:(.text+0x9): undefined reference to `__main'
hello.o:hello.c:(.text+0x15): undefined reference to `puts'
我如何 link 这个 assembled 程序 hello.o 才能最终生成可执行程序 hello.exe?我错过了什么? [使用 Windows 8.1,Mingw 版本 0.6.2。]在此先感谢。
即使您对澄清问题的回答不是特别有用:
试试
ld hello.o -lmsvcrt -entry=_main -subsystem=console -o hello.exe
如果您想查看标准 gcc 使用的链接器命令行,请像这样调用 gcc:
gcc test.c -o test -Wl,-v
最后一行输出是您应该使用的...
如果您想编译某些东西而不是试验工具,请不要 link 直接使用 linker。使用 gcc,它将使用正确的选项为您调用 linker:
编译步骤:
gcc -c hello.c
Link 步骤:
gcc -o hello.exe hello.o
或合二为一:
gcc -o hello.exe hello.c
也可以使用简单的Makefile,然后运行 make
:
all: hello.exe
我的桌面上有一个简单的 "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
- 我 assemble 它与 : as -o hello.o hello.s
到目前为止一切都很好。但是,我无法 link 它。除了其他命令外,我已经尝试过这些:
ld -o hello.exe hello.o
ld -o hello.exe hello.o -lgcc
ld -o hello.exe hello.o -nostdlib -lgcc
没有任何效果。我在每个案例中遇到的 link 错误是:
hello.o:hello.c:(.text+0x9): undefined reference to `__main'
hello.o:hello.c:(.text+0x15): undefined reference to `puts'
我如何 link 这个 assembled 程序 hello.o 才能最终生成可执行程序 hello.exe?我错过了什么? [使用 Windows 8.1,Mingw 版本 0.6.2。]在此先感谢。
即使您对澄清问题的回答不是特别有用:
试试
ld hello.o -lmsvcrt -entry=_main -subsystem=console -o hello.exe
如果您想查看标准 gcc 使用的链接器命令行,请像这样调用 gcc:
gcc test.c -o test -Wl,-v
最后一行输出是您应该使用的...
如果您想编译某些东西而不是试验工具,请不要 link 直接使用 linker。使用 gcc,它将使用正确的选项为您调用 linker:
编译步骤:
gcc -c hello.c
Link 步骤:
gcc -o hello.exe hello.o
或合二为一:
gcc -o hello.exe hello.c
也可以使用简单的Makefile,然后运行 make
:
all: hello.exe