MinGw交叉编译

3
我将尝试使用以下命令在 Linux 上编译一个 Windows .c 文件:
wine gcc.exe  x.c  -o x.exe -lws2_32

我遇到了这个错误。

C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../libmingw32.a(main.o):main.c:(.text+0x104): 未定义对 `WinMain@16' 的引用

然而,当使用 gcc.exe 带上 -shared 属性时,该错误消失了。

wine gcc.exe -shared x.c  -o x.exe -lws2_32

我尝试查看gcc.exe的帮助页面,但找不到与“-shared”参数相关的内容。
这个参数是用来生成动态链接库的。
2个回答

2
-shared选项会从代码中生成共享对象,而不是可执行文件。
可执行文件需要一个主函数作为入口点,因此你看到了undefined reference错误。 共享对象可以与其他对象链接以生成可执行文件。
请参见这里这里

0

你的第一行其实几乎是正确的。(Doctorlove 告诉你 shared 是用来制作共享对象、库的,这是正确的。)

你需要添加:

wine gcc.exe -mwindows x.c  -o x.exe -lws2_32

-mwindows选项是告诉GCC你想要链接一个图形化的Windows程序,而不是一个控制台程序。当然,你的程序也必须包含一个main()或WinMain()函数,否则你会再次收到相同的错误消息。

顺便说一句,你可能想知道,你不必使用wine来交叉编译Mingw。Linux上有mingw交叉编译器。在Debian和Ubuntu上,你可以使用apt-get install mingw32安装它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接