【问题标题】:Code::Blocks, MinGW, libsdl, and GNU C++ compiler: undefined reference to `WinMain@16Code::Blocks、MinGW、libsdl 和 GNU C++ 编译器:未定义对 `WinMain@16 的引用
【发布时间】:2014-04-15 05:52:15
【问题描述】:

我一直在尝试编译最基本的 SDL 应用程序,但无论我做什么,我都会不断收到此错误:

c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.4.1/../../../libmingw32.a(main.o):main.c:(.text+0xd2): undefined reference to `WinMain@16'

我为此搜索了解决方案,但它们都与 Visual C++ 或缺少的 main 有关。我没有使用 Visual C++,我已经定义了 main。

这是我的代码:

#include "SDL/SDL.h"

int main( int argc, char* args[] )
{
    //Start SDL
    SDL_Init( SDL_INIT_EVERYTHING );

    //Quit SDL
    SDL_Quit();
    return 0;
}

【问题讨论】:

  • 确保命名空间中没有main。并链接到-lmingw32
  • 试试这个链接:(你可能已经试过了)wiki.libsdl.org/moin.fcg/FAQWindows
  • 我进入了 Code::blocks 中的链接器设置,并在“其他链接器选项”下输入了“-lmingw32 -lSDLmain -lSDL -mwindows”,但仍然出现错误。
  • 是的,但我使用的是 GNU 编译器和 -mwindows 标志。

标签: c++ mingw codeblocks


【解决方案1】:

不要使用“其他链接器选项”。使用“链接库”部分。添加以下项目。

mingw32
SDLmain
SDL

您可以将-mwindows 放在“其他链接器选项”部分。

【讨论】:

    【解决方案2】:

    如果其他人遇到这个问题,我将 -lmingw32 放在 -lSDLmain 和 -lSDL 之后,这对我来说是这个问题。先把 -lmingw32 修好了。

    【讨论】:

      【解决方案3】:

      我在我想在 linux 和 windows 上编译的项目中遇到了同样的错误。 我使用 makefile 来编译项目。 一个对我有用的解决方案,虽然我承认这有点小技巧,但将它添加到 main.cpp (无论你的主要功能在哪里)

      extern "C" {
      
          int WinMain(int argc, char** argv)
          {
              return main(argc, argv);
          }
      }
      

      这使链接器找到 WinMain 并将其用作程序的入口点。我也希望这个解决方案不会破坏 linux 的可编译性,希望它只是一个未使用的函数。

      【讨论】:

        猜你喜欢
        • 2012-02-20
        • 1970-01-01
        • 2019-04-05
        • 2020-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多