4

MinGW 上に構築され、SDL を使用する C++ プロジェクトをセットアップしようとしています。プログラムをコンパイルしようとすると、undefined reference to 'SDL_Function'使用する SDL 関数ごとに g++ が表示されます。

Lib/SDL2: SDL の Web サイトの SDL2-devel-2.0.0-mingw.tar.gz の内容

ソース/Main.cpp:

#include "SDL.h"

int main(int argc, char *argv[]) {
    SDL_Init(SDL_INIT_VIDEO);

    SDL_Window *window = SDL_CreateWindow(
        "Hello World",
        SDL_WINDOWPOS_CENTERED,
        SDL_WINDOWPOS_CENTERED,
        640, 480, 0
    );

    SDL_Delay(3000);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

ビルド プロセスを少し簡略化するために Rake を使用しています。生成されるコマンドは次のとおりです。

g++ -Wall -ILib/SDL2/i686-w64-mingw32/include/SDL2 -Dmain=SDL_main -LLib/SDL2/i686-w64-mingw32/lib -lmingw32 -lSDL2main -lSDL2 -mwindows Source/Main.cpp -o Build/sdltest.exe

そして、これがg ++の言うことです:

Main.cpp:(.text+0xe): undefined reference to `SDL_Init'`
Main.cpp:(.text+0x42): undefined reference to `SDL_CreateWindow'`
Main.cpp:(.text+0x51): undefined reference to `SDL_Delay'`
Main.cpp:(.text+0x5c): undefined reference to `SDL_DestroyWindow'`
Main.cpp:(.text+0x61): undefined reference to `SDL_Quit'`
ld.exe: bad reloc address 0x20 in section `.eh_frame'`
ld.exe: final link failed: Invalid operation`
collect2.exe: error: ld returned 1 exit status`

これは一般的な初心者の問題のように見えますが、すべてのトラブルシューティング ポイントに合格していると思います。

  • 主な機能はint argc, char *argv[]
  • sdl-config のすべてのフラグを使用します (-Dmain=SDL_main -lmingw32 -lSDL2main -lSDL2 -mwindows)
  • 32 ビット MinGW を使用している場合、想定どおりに「i686-w64-mingw32」バージョンを使用しようとしています。
  • 指定されたパスはすべて正しいようです

何が起こっているのか手がかりはありますか?

4

2 に答える 2

15

入力パラメーターのシーケンスを変更してみてください。

私は以前にこれにつまずいたことがあります(Linuxの場合):

この呼び出しはエラーを生成します:

g++ $(pkg-config --cflags --libs sdl2) sdl2test.cpp 

sdl2test.cpp:(.text+0x11): undefined reference to `SDL_Init'
sdl2test.cpp:(.text+0x20): undefined reference to `SDL_GetError'
sdl2test.cpp:(.text+0x34): undefined reference to `SDL_Quit'

これは機能します:

g++ sdl2test.cpp $(pkg-config --cflags --libs sdl2)
于 2013-08-27T12:03:40.923 に答える
1

入力パラメーターのシーケンスを変更したところ、機能し、 SDL2main をSLD2 の前に配置しました。

于 2016-11-24T23:54:02.763 に答える