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”参数相关的任何内容

这个论点有什么作用?

4

2 回答 2

2

-shared将从代码生成共享对象,而不是可执行文件。
可执行文件需要一个 main 函数作为入口点,因此undefined reference您会看到错误。共享对象可以与其他对象链接以生成可执行文件。
这里这里

于 2013-09-16T11:03:31.343 回答
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.

于 2013-09-16T11:29:54.970 回答