質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

SDL2のインストールで「arch の使い方が誤っています。」が発生

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 181

Ruqueto

score 6

前提・実現したいこと

C又はC++でディスプレイに図形を描画しようとしています(ホビー目的)。
折角Cを使うので、マルチプラットフォームにしたいと思い、SDL2の導入を考えています。

発生している問題・エラーメッセージ

SDLのホ-ムページの「Development Libraries」よりSDL2-devel-2.0.12-mingw.tar.gzをダウンロードし、SDL2のファイル群(SDL2-2.0.12フォルダ)をC:\に保存しました。
「INSTALL.txt」にあるように、MS-DOSプロンプトでmake crossを実行したところ、makefileのcross:タグでエラーが発生しSDL2をインストール出来ませんでした。

arch の使い方が誤っています。
make: *** [cross] エラー 255

該当のソースコード

#
# Makefile for installing the mingw32 version of the SDL library

CROSS_PATH := /usr/local
ARCHITECTURES := i686-w64-mingw32 x86_64-w64-mingw32

all install:
    @echo "Type \"make native\" to install 32-bit to /usr"
    @echo "Type \"make cross\" to install 32-bit and 64-bit to $(CROSS_PATH)"

native:
    make install-package arch=i686-w64-mingw32 prefix=/usr

cross:
    for arch in $(ARCHITECTURES); do \
        make install-package arch=$$arch prefix=$(CROSS_PATH)/$$arch; \
    done

install-package:
    @if test -d $(arch) && test -d $(prefix); then \
        (cd $(arch) && cp -rv bin include lib share $(prefix)/); \
        sed "s|^prefix=.*|prefix=$(prefix)|" <$(arch)/bin/sdl2-config >$(prefix)/bin/sdl2-config; \
        chmod 755 $(prefix)/bin/sdl2-config; \
        sed "s|^libdir=.*|libdir=\'$(prefix)/lib\'|" <$(arch)/lib/libSDL2.la >$(prefix)/lib/libSDL2.la; \
        sed "s|^libdir=.*|libdir=\'$(prefix)/lib\'|" <$(arch)/lib/libSDL2main.la >$(prefix)/lib/libSDL2main.la; \
        sed "s|^prefix=.*|prefix=$(prefix)|" <$(arch)/lib/pkgconfig/sdl2.pc >$(prefix)/lib/pkgconfig/sdl2.pc; \
    else \
        echo "*** ERROR: $(arch) or $(prefix) does not exist!"; \
        exit 1; \
    fi

試したこと

  • archについて調べてみると、Arch Linuxの情報は出て来ますが、archコマンドの記述を見つけることが出来ません。
  • MS-DOSプロンプトでarchと打っても、
    'arch' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    エラーが発生します。
  • 当初は、Mingw-w64の配下にSDL2のフォルダを(解凍)コピーし、任意のサンプルプログラムをコンパイルしましたが、エラーが発生しました。

補足情報(FW/ツールのバージョンなど)

  • OS:Windows10 Home 1909
  • コンパイラー:Mingw-w64(x86_64-8.1.0-posix-sjlj-rt_v6-rev0)

インストールのために参考としたサイト

  • MinGW 用の SDL2 インストール手順 メモhttps://gist.github.com/Hamayama/155b5557db31334ce492
  • SDL2のビルド環境構築
    https://www.hiroom2.com/2015/05/11/sdl2%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/#sec-3
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

MSYSはインストールされていますか。

Makefileの内容を見ると、bashを前提としてスクリプトが書いてあるので、makeからbashが起動されてfor文を処理する必要があります。

コマンドプロンプトでも作業できますが、後で行なう作業でディレクトリの指定が面倒くさいので、まずMSYSに付属するbashを起動してください。いまどきのWindowsには、WSL用のbash.exeも入っていますから、間違いなくMSYSのbashが起動されるように注意して起動してください。

> C:\_____\MingW\msys\1.0\bin\bash
$ 

bashが起動したら、適当なディレクトリでダウンロードしてきたtar.gzを展開し、作成されたSDL-2.0.12ディレクトリに移動して、「make」を実行してみます。

$ make
Type "make native" to install 32-bit to /usr
Type "make cross" to install 32-bit and 64-bit to /usr/local


となるはずです。

この状態で「make native」は成功しますが、「make cross」はインストール先のディレクトリが見つからないため失敗します。

$ make cross
for arch in i686-w64-mingw32 x86_64-w64-mingw32; do \
            make install-package arch=$arch prefix=/usr/local/$arch; \
        done
make[1]: Entering directory `/_____/SDL2-2.0.12'
*** ERROR: i686-w64-mingw32 or /usr/local/i686-w64-mingw32 does not exist!
make[1]: *** [install-package] Error 1
make[1]: Leaving directory `/_____/SDL2-2.0.12'
make[1]: Entering directory `/_____/SDL2-2.0.12'
*** ERROR: x86_64-w64-mingw32 or /usr/local/x86_64-w64-mingw32 does not exist!
make[1]: *** [install-package] Error 1
make[1]: Leaving directory `/_____/SDL2-2.0.12'
make: *** [cross] Error 2

そこで、「/usr/local」以下に、「i686-w64-mingw32」と「x86_64-w64-mingw32」ディレクトリを作成します。おそらく、「/usr/local」自体もないので、

$ mkdir /usr/local
$ mkdir /usr/local/i686-w64-mingw32
$ mkdir /usr/local/x86_64-w64-mingw32


としてください。

あとは、「make cross」でインストールが完了するはずです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/05 23:36

    詳細なご説明ありがとうございます。
    MSYS2(MSYSも)インストールしていません。SDL2はWindowsでも使えると言う事ですが、MSYS2が必要なんですね。
    どうもありがとうございました。

    キャンセル

  • 2020/07/05 23:41

    回答に書いてあるように、インストールするのにbashなどが必要になるから、です。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る