web-dev-qa-db-ja.com

SDL使用時のWinMain @ 16への未定義の参照

Linuxとは対照的に、Windowsで開発を開始できるように、すべてを機能させるのに多くの問題を抱えています。これは、コーディング時に通常使用するものです。 SDLプログラムをコンパイルしようとすると、かなり奇妙な問題が発生します。 SDLライブラリを含めるとすぐに、プログラムはコンパイルを拒否し、次のエラーが発生します。

c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libmingw32.a<main.o>: In function 'main':
C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference to 'WinMain@16'
collect2: ld returned 1 exist status

コンソールでMinGWを使用しています。

例を挙げると、

gcc -o test main.c

これは正常にコンパイルされます:

#include <stdio.h>
#include <stdlib.h>

int main(int argv, char **argc)
{
    printf("Hello, world!\n");

    return 0;
}

しかし、#includeを追加するとすぐに(SDL関数が呼び出されていなくても)上記のエラーが発生します

使用:

gcc -o test main.c -lSDL

これはコンパイルに失敗します:

#include <stdio.h>
#include <stdlib.h>

#include <SDL/SDL.h>

int main(int argv, char **argc)
{
    printf("Hello, world!\n");

    return 0;
}

どんな助けでも大歓迎です!これは主な機能を忘れている人によくある問題だと読みましたが、明らかに私の問題ではありません。また、Windowsのグラフィカルプログラムを扱うときに使用される主な機能はWinMainであると聞きましたが、これまでWindowsで開発を進めていたときは、これが問題になることはありませんでした。

9
Velovix

このエラーに関する詳細情報を少し検索したところ、 このページ が見つかりました。これには次の情報が含まれています。

これをコンパイルするための唯一のトリックは、インクルードパス(例:-I ../ SDL/include)、リンカーパス(例:-L ../ SDL/lib)を追加し、最後にライブラリを追加することです。正しい順序で自分自身。使用する:

-lmingw32 -lSDLmain -lSDL

また、IDEが(リンクしたい他のライブラリに加えて)自動的に追加しない場合は、-mwindowsフラグを追加することを忘れないでください)。それらを正しい順序で指定すると、シンボルWinMain @ 16が欠落していることを訴えるリンカーエラーが発生します。

上記のフラグを使用して再コンパイルしてみて、それが違いを生むかどうかを確認してください。

15
WhoBuntu