お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2018-09-10 04:40:39

no522
新しいメンバ
登録日: 2018-09-10

「`SDL_Init' に対する定義されていない参照です」と出て、コンパイルできません。

こんばんは。
18.04 LTSでC/C++を使ってゲーム作りを行おうとしています。
しかし、題名通りSDL.hをインクルードしてもコンパイルできません。

1)#include <SDL.h>

でコンパイルすると、
SDL.h: そのようなファイルやディレクトリはありません
#include <SDL.h>

と表示されるので、パスを指定して直接コンパイルしました。すると

/tmp/ccxvGevy.o: 関数 `main' 内:
test.cpp:(.text+0x15): `SDL_Init' に対する定義されていない参照です
test.cpp:(.text+0x23): `SDL_GetError' に対する定義されていない参照です
test.cpp:(.text+0x37): `SDL_Log' に対する定義されていない参照です
test.cpp:(.text+0x43): `SDL_Quit' に対する定義されていない参照です
collect2: error: ld returned 1 exit status

と出てしまいます。
その時のコードは以下です。

#include </usr/local/include/SDL2/SDL.h>

int main(int argc, char* argv[]) {
    if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) {
        SDL_Log("SDLを初期化できなかった: %s", SDL_GetError());
        return 1;
    }

    /* ... */

    SDL_Quit();
    return 0;
}


どうかエラーなくコンパイルする方法を教えてください。
Ubuntuもプログラミング言語もまだ初心者なので、足りない情報があれば教えてください。

オフライン

 

#2 2018-09-10 07:03:38

ry
メンバ
登録日: 2008-07-30

Re: 「`SDL_Init' に対する定義されていない参照です」と出て、コンパイルできません。

ずいぶんとプログラミングから離れているので具体的な解決手法の提示はできませんが、

エラーメッセージからすると、リンク ライブラリの場所を指定しないでビルドしているのが原因と思われます。
前半にヘッダー ファイルが見つからないというエラーがあったということからも、依存ファイルの場所を意識しないままにプログラミングを行っているような気がします。
実際に自身が作成・編集するファイル以外に、そのコードが参照 (依存) するファイルの場所を理解して、コンパイル時にそれを指定してください。

オフライン

 

#3 2018-09-10 10:04:53

si
メンバ
From: hokkaido kitami, jp
登録日: 2007-01-15

Re: 「`SDL_Init' に対する定義されていない参照です」と出て、コンパイルできません。

no522 による投稿:

こんばんは。
18.04 LTSでC/C++を使ってゲーム作りを行おうとしています。
しかし、題名通りSDL.hをインクルードしてもコンパイルできません。

1)#include <SDL.h>

でコンパイルすると、
SDL.h: そのようなファイルやディレクトリはありません
#include <SDL.h>

と表示されるので、パスを指定して直接コンパイルしました。すると

/tmp/ccxvGevy.o: 関数 `main' 内:
test.cpp:(.text+0x15): `SDL_Init' に対する定義されていない参照です
test.cpp:(.text+0x23): `SDL_GetError' に対する定義されていない参照です
test.cpp:(.text+0x37): `SDL_Log' に対する定義されていない参照です
test.cpp:(.text+0x43): `SDL_Quit' に対する定義されていない参照です
collect2: error: ld returned 1 exit status

と出てしまいます。
その時のコードは以下です。

#include </usr/local/include/SDL2/SDL.h>

int main(int argc, char* argv[]) {
    if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) {
        SDL_Log("SDLを初期化できなかった: %s", SDL_GetError());
        return 1;
    }

    /* ... */

    SDL_Quit();
    return 0;
}


どうかエラーなくコンパイルする方法を教えてください。
Ubuntuもプログラミング言語もまだ初心者なので、足りない情報があれば教えてください。

ネットを検索すると、いくつかのUbuntuでの紹介ページがヒットします。
その中の一つによると、Ubuntuのパッケージも標準で用意されているようです。
( https://gihyo.jp/admin/serial/01/ubuntu-recipe/0268 )
確認(Ubuntu 18.04)
sudo apt list 'libsdl*'
で、SDL のバージョン1.2 と2.0 があるようです。

初心者ということなので、最初は、Ubuntuのパーケージを使い、勉強されては、如何でしょうか?

* Ubuntuのバージョンを明記しましょう。
* プログラミングには、開発関係のツールの使い方を、覚える必要があります。
テキストエディタ、gcc, make, ld 等々
eclipse などの、IDE(統合開発環境)を使うことも選択肢に入るかもしれません。
* インクルードファイルの位置は、通常、gcc のオプションとして指定します。

オフライン

 

Board footer

Powered by FluxBB