1

c++、SDL、および SDL イメージを使用してゲームを作成しようとしています。Code::Blocks を IDE として使用していますが、問題が発生しています。

最新の mingw SDL 開発ファイルと最新の mingw SDL イメージ開発ファイルをダウンロードしました。

すべての SDL イメージのものを SDL のものと同じディレクトリに配置しました (一方を他方にマージします)。

x86_64-w64-mingw32/include および x86_64-w64-mingw32/lib ディレクトリを Code::Blocks 検索ディレクトリに追加しました。

私のリンカー設定は次のとおりです。

-lmingw32
-lSDL2main
-lSDL2
-lSDL2_image
-lopengl32
-lglu32

(明らかに、私も openGL を使用していますが、ここでは関係ないと思います)。

私が知る限り、私は正しい #includes を持っています:

#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_opengl.h>

しかし、私はまだエラーが発生しています:「IMG_Load」への未定義の参照

ビルドログは次のとおりです。

obj\Release\gfx_Texture.o:gfx_Texture.cpp:(.text+0xd7): undefined reference to `IMG_Load'
obj\Release\gfx_Texture.o:gfx_Texture.cpp:(.text+0x1dd): undefined reference to `SDL_FreeSurface'
obj\Release\gfx_Texture.o:gfx_Texture.cpp:(.text+0x1f4): undefined reference to `SDL_FreeSurface'
g:/program files(x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: obj\Release\gfx_Texture.o: bad reloc address 0x4 in section `.text.startup'
g:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation

そして実際のコード:

SDL_Surface* image = IMG_Load(file);

file は char* です。

SDL 1.2 と比較して、SDL 2.0 での SDL_Surfaces の動作にいくつかの変更があったことを理解しています (1.2 から 2.0 と MVSC から C::B の両方に移行しようとしています)。それをしますか?IMG_Load を間違って使用していますか?

ご協力いただきありがとうございます。不足している情報があれば、リクエストに応じて提供します。

SDL の最新バージョンは 2.0.1 ですが、SDL_image の最新バージョンは 2.0.0 です。それらのバージョンを一致させる必要がありますか?

4

3 に答える 3

2

これは、プログラムが実行時に正しくリンカしない場合に発生します

例: asas@asas:~/SDL$ g++ -Wall SDL_program.cpp -lSDL2
/tmp/cc1eC6CK.o: Infunction LTexture::loadFromFile(std::__cxx11::basic_string<char,std::char traits<char>, std::allocator<char> >)': SDL_program.cpp:(.text+0x7d): **undefined reference toIMG_Load'**

上記のように、linker -lSDL2_image がありません。

同じルートに SDL1.2 と SDL2 があり、コード ブロックが正しくリンクされていない可能性もあります。

于 2016-11-03T03:30:21.513 に答える
1

まあ、私はばかげているとは思わないでください。私が MVC で作業していたとき、x86 プレフィックスは 32 ビットを意味していました。何らかの理由で、C::B では 64 ビットを意味し、i686 プレフィックスは 32 ビットを意味します。

于 2014-02-10T06:48:29.103 に答える