0

オブジェクト.hpp

#ifndef OBJECT_HPP
#define OBJECT_HPP

#include <SFML/Graphics.hpp>

using namespace std;

class Object {
  private:
    sf::Image image;

  public:
    float x;
    float y;
    int width;
    int height;
    sf::Sprite sprite;

    virtual void update();
};

#endif

オブジェクト.cpp

void Object::update() {

}

ここに私のメイクファイルがあります:

LIBS=-lsfml-graphics -lsfml-window -lsfml-system

all:
    @echo "** Building mahgame"

State.o : State.cpp
    g++ -c State.cpp

PlayState.o : PlayState.cpp
    g++ -c PlayState.cpp

Game.o : Game.cpp
    g++ -c Game.cpp

Object.o : Object.cpp
    g++ -c Object.cpp

Player.o : Player.cpp
    g++ -c Player.cpp

mahgame : Game.o State.o PlayState.o Object.o Player.o
    g++ -o mahgame Game.o State.o PlayState.o Object.o Player.o $(LIBS)

    #g++ -c "State.cpp" -o State.o
    #g++ -c "PlayState.cpp" -o PlayState.o
    #g++ -c "Game.cpp" -o Game.o
    #g++ -c "Object.hpp" -o Object.o
    #g++ -c "Player.hpp" -o Player.o
    #g++ -o mahgame Game.o State.o PlayState.o Object.o Player.o $(LIBS)

clean:
    @echo "** Removing object files and executable..."
    rm -f mahgame

install:
    @echo '** Installing...'
    cp mahgame /usr/bin

uninstall:
    @echo '** Uninstalling...'
    rm mahgame

ビルド時に発生するエラーは次のとおりです(ビルド後、リンカーエラーです):

/usr/bin/ld:Object.o: file format not recognized; treating as linker script
/usr/bin/ld:Object.o:1: syntax error
collect2: error: ld returned 1 exit status
make: *** [all] Error 1

何が起こっているのか分かりますか?前もって感謝します。

4

3 に答える 3

1

万が一、ccacheを使用していましたか?私はあなたと非常によく似た問題を抱えていましたが、コンパイルでccacheを省略すると解決しました。

于 2012-11-14T18:23:23.637 に答える
0

少し冗長で、ヘッダーの依存関係が欠落している場合、Makefile は完璧に見えます。シェルコマンドには先頭のタブ文字があると思います。あなたのビルドコマンドはmake mahgame.

あなたが言ったように、リンカーエラーがあります。Object.oは有効ではないようです.o。コンパイラに再生成してもらいます。

$ rm Object.o
$ make mahgame
g++ -c Object.cpp
g++ -o mahgame Game.o State.o PlayState.o Object.o Player.o...
于 2012-08-31T10:13:51.140 に答える
0

makefile の形式は次のとおりです。

xxx.o : xxx.cpp
   g++ -c xxx.cpp

あなたのものはそのようには見えません。したがって、次のように変更します。

LIBS=.....

[EDIT]
all : mahgame rmerr

rmerr :
   rm -f err
[/EDIT]

State.o : State.cpp
   g++ -c State.cpp 2>>err

PlayState.o : PlayState.cpp
   g++ -c PlayState.cpp 2>>err

.....

mahgame : Game.o State.o .....
   g++ -o mahgame Game.o State.o PlayState.o Object.o Player.o $(LIBS) 2>>err

これらは最初のステップであることに注意してください。ソース ファイル/オブジェクト ファイル/その他のすべての詳細を含まないメイクファイルを作成するはるかに優れた方法があります。

于 2012-08-30T20:49:27.050 に答える