2017-01-21 9 views
3

Linux用のSDLチュートリアルを使用したシンプルなC++をフォローしていましたが、途中でエラーが発生しました。コンパイル時にGeany、g ++、SDLエラーが発生しました

私はGeanyを使用していると私は、対応するSDL2のLIBSをダウンロードし、ここでのことですがまず第一に:

私のプロジェクトフォルダ内main.cxxファイルがある、私は前に述べたように、私はgeanyで開くました:

私はこのライブラリに含ま:

#include <iostream> 
#include <SDL2/SDL.h> 
#include <SDL2/SDL_image.h> 
#include <SDL2/SDL_mixer.h> 

まず、私はコンパイルがsucessfully行い、pelculiarエラーが発生しましたが、それはビルドするために来るとき、私はこのエラーを得た:

コンパイル:

main.cxx: undefined reference to `SDL_Init'

は、ビットを検索した後、私は彼らがこのようなsomethinfになってしまうだろうので、私のgeanyビルドオプションにタグ-lSDLを追加しなければならなかったことが判明

g++ -Wall -c -lSDL "%f" 

ビルド:

g++ -Wall -o -lSDL "%e" "%f" 

しかし、問題がある、私はビルドコマンドを実行したときに、今私が取得:

G ++: error: main: There is no such file or directory

なぜこのエラーが発生するのですか、間違ったライブラリを含むか、g ++に.cxxファイルに問題がありますか? 私は既に.cxxと.cppの間の変換を試みました。

ありがとうございます。

+1

SDLの間違ったバージョンをリンクしていると思います。ヘッダーにはSDL2が含まれていますが、SDLとのみリンクしています。 '-lSDL2'を試してください。 – Rakete1111

+0

コンパイル順を 'g ++ -Wall -c -lSDL2"%f "'に変更し、ビルド1を 'g ++ -Wall -o -lSDL2"%e ""%f "'に変更しました。 "そのようなファイルはありません"というエラーです。 –

+1

'SDLmain'をリンクしようとしてみてください – Rakete1111

答えて

1
g++ -Wall -c -lSDL2 "%f" 

コンパイル時にはライブラリを指定する必要はありません。 -lSDLを削除します。これはコンパイラを呼び出し

g++ -Wall -o -lSDL2 "%e" "%f" 

は、(いかなる-cまたは他の操作固有のフラグ)を連結しない意味し、そして-lSDL2に出力ファイル名を設定します。つまり、リンカは結果のバイナリを現在の作業ディレクトリにある-lSDL2というファイルに出力します。そして、リンクするファイルが来るとmainとなりますが、これは-o mainとなっていますが、フラグの順序が間違っているため、リンカが結果のバイナリにリンクしようとする通常のファイル名になります。このファイルは存在しません。

短くても結構な結線をしてください - g++ -o "%e" %f -lSDL2(ライブラリが最後に来る、ライブラリの順序も重要です)。

+0

あなたが提案した最後の行は" no such file error "を取り除いていますが、これを置き換えた後にこのエラーが表示されます。' g ++ -o "main" main.cpp -lSDL2(en el directorio:/ home/omar/proyectos/testingsdl) /tmp/ccrj38Jv.o: 'main '関数内にあります。 main.cpp :(。テキスト+ 0xe9):IMG_LoadTextureのsin定義者を参照します。 main.cpp :(。テキスト+ 0x124):IMG_LoadTextureのsin定義者を参照します collect2:エラー:ldが1の終了ステータスを返しました Ha fallado lacompilación.これは基本的に未定義の参照エラーです。 –

+0

'IMG_LoadTexture'は' SDL2'ではなく 'SDL2_image'に属していますので、あなたのライブラリは少なくとも' -lSDL2 -lSDL2_image'以上です。 – keltar

+0

働いた!、ありがとう:D –

関連する問題