2016-04-09 1 views
0

私はC++(そして一般的なプログラミング)には新しく、現在は "SDL.h"ヘッダーをEclipseのC++プロジェクトにインライン展開しようとしていますminGW btw)。私はヘッダファイルへのパスとSDLのライブラリをプロジェクトに提供しました。しかし、私は特に「SDL.h」とビルドが含まwhenver、プロジェクト、私は次のメッセージを得る:SDL.h "プログラムファイルが存在しません"

「 『SDL Basic.exeを起動するには、』プログラムファイルが存在しない問題が発生しました。」

を私はこれがSDL.hを含むプロジェクトをビルドするたびに.exeファイルが生成されないという事実と関係していると確信しています。私が得ないのは、なぜこれが起こるのかです。 SDL_assertのような他のSDLヘッダーを含めると、これは問題ではありません。 .exeファイルはいつものように生成され、プログラムはちょうど実行されます。[画像の説明はこちら] [1]

http://i.stack.imgur.com/cdV8U.jpg SDL.hが含まれている場合の表示方法

http://i.stack.imgur.com/MW7PX.jpg SDLの他のものが含まれている場合の表示方法

+0

CDTビルドコンソールの全文を入力してください。あなたのイメージには未定義のリファレンスがありますが、それがイメージの端をどのように過ぎているのか不思議です。 SDL.hヘッダーが外部ライブラリでリンクする必要があるコードを取得しているため、リンク操作が失敗している可能性があります。 – Aenimated1

+0

さて、ここに本文があります:http://imgur.com/XzKZruI –

答えて

0

私は問題を修正したようです。私がプログラムを実行するたびにコンソールウインドウ外に "Winmain @ 16 'への未定義の参照があります。だから、私はそれを調べて、SDLがSDL_main.hに独自の主な機能を定義していることを知りました。これは合計で2つの主な機能を提供します。私はSDL.hを含ま前に、マクロSDL_MAIN_HANDLEDを定義し、見ていた独自の主な機能を定義することからSDLを防ぐために、それが働いた:

http://i.stack.imgur.com/mNOOE.jpg

は誰かがより詳細にこれを私はしたい本当に説明することができた場合感謝します。

0

私は若干の調査を行いましたが、WinMain @ 16への未定義の参照は、SDLがアプリケーションのWindowsエントリポイントを自動的に作成するためですが、SDL実装にリンクするために必要なライブラリを提供していないためです。そのエントリポイント。ただし、SDL機能を使用する場合は、実際に使用したいSDL機能を活用するために必要ないくつかの重要な初期化手順を実行するため、実際にエントリポイントが必要です。

SDL_MAIN_HANDLEDの定義は、独自のWindowsエントリポイント(WinMainなど)を提供できるメカニズムですが、より柔軟なアプローチですが、より複雑なアプローチです。これはあなたの問題を解決するだけです。なぜなら "main"が "SDL_main"に再定義されるのを防ぎます。つまり、あなたの.cppファイルはもはやSDLライブラリを必要としなくなります。コンパイルとリンクができますが、探しているSDL機能はありません。

適切なライブラリにリンクする必要があります。 hereを参照してください - 役立つ情報がいくつかあります。

関連する問題