【问题标题】:GCC - Compiling C undefined reference to `wWinMain'GCC - 编译 C 未定义的对“wWinMain”的引用
【发布时间】:2021-06-08 11:28:11
【问题描述】:

我正在尝试在命令提示符下使用 gcc 编译 C,但我收到了这个未定义的对 `wWinMain' 的引用错误。

我首先得到了对“WinMain”的未定义引用,但我通过添加参数解决了这个问题:

-municode

现在 `wWinMain' 未定义。如何解决这个问题?

C:\Development\WA\Library\Backend\C\CB\CB>gcc CB.c -lssl -lcrypto -municode
C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: 
C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-crt0_w.o):crt0_w.c:(.text+0x21): undefined reference to `wWinMain'
collect2.exe: error: ld returned 1 exit status

【问题讨论】:

  • 当然,您可以通过删除-municode 轻松修复该问题(抱歉,无法抗拒)。那么那个C的入口点是什么?如果它没有WinMain,它有什么,main?还是一个没有入口的库?
  • @dratenik 是的,它是一个图书馆。正如我所写,如果我删除 -municode,我会得到对 WinMain 的未定义引用。如果我添加它,我会得到对 `wWinMain' 的未定义引用。
  • 您期望得到什么?没有参数,您要求创建一个.exe 文件。如果你想要一个.o 目标文件,那么你需要添加-c,如果你想要一个.dll,我完全不知道,但我相信你可以找到正确的选项在某处使用。

标签: c gcc winmain


【解决方案1】:

gcc CB.c -lssl -lcrypto 将编译并链接一个应用程序,它在 Windows 上默认为一个窗口应用程序,其入口点是 WinMain(您的库显然没有也不需要它)。

添加-municode只是指示系统使用windows unicode API,然后入口点变成wWinMain,你仍然有同样的问题。

要构建 DLL,请添加 -shared: gcc CB.c -shared -lssl -lcrypto

【讨论】:

  • 好的,我得到了我的错误。我需要一个 DLL,我尝试添加 -shared。它现在可以工作,但仍在生成 .exe
  • @Xayris 您可能需要添加-o 选项。请阅读文档,也许还有一些教程以获得进一步的启发。
  • @Xayris,.exe 是默认扩展名。使用-o cb.dll 指定输出名称。
  • @koder 非常感谢,这很有效。我会阅读文档以获取更多详细信息。
猜你喜欢
  • 2021-01-14
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多