2017-02-03 5 views
0

QTCreatorで生成されたMakefileに問題があります。"Exec format error" g ++で作成されたバイナリを実行中

TESTS: ../WannaBeRPG/testes.cpp ../WannaBeRPG/hero.h ../WannaBeRPG/charinterface.h 
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o RunTests ../WannaBeRPG/testes.cpp 

フラグは次のとおりです:ここbash: ./RunTests: cannot execute binary file: Exec format error

は私のメイクファイルルールがどのように見えるかです:すべては私の端末は述べています、私は自分自身に私のテストのための新たな実行可能ファイルを作成しようとする場合を除いて正常に動作しています

CXX = g++ 
CXXFLAGS = -pipe -g -std=gnu++0x -Wall -W -fPIC $(DEFINES) 
INCPATH = -I../WannaBeRPG -I. -I/usr/lib64/qt5/mkspecs/linux-g++ 
DEFINES = -DQT_QML_DEBUG 

それは、ここではとにかく便利であれば、私のtestes.cppファイルです:

#include <gtest/gtest.h> 
#include "hero.h" 

TEST(teee, HPTEST) 
{ 
    Hero myHero("Hika",150,100,0,0,0,0,0,0,0); 
    EXPECT_EQ(100,myHero.getHP()); 
} 

int main_tests(int argc, char* argv[]) 
{ 
    testing::InitGoogleTest(&argc,argv); 
    return RUN_ALL_TESTS(); 
} 

私はFedoraを使用しています。 これはなぜこのように動作しますか?このMakefileからのプライマリexecは完全にうまく動作します。

+0

私は100%確信しているわけではありませんが、./RunTestsを実行するには実行権限が必要であり、そのディレクトリに実行権限が必要です。$ ls -l RunTestsは何かを返す必要があります-rwxr-xr-xまたは少なくとも-rwx ------または少なくとも-rx ------のように指定します。また、見つかったディレクトリもチェックします。実行権限には "x"も必要です。 "umask"変数の値に問題があるかもしれません。つまり、新しいファイルが作成されると、そのファイルから実行権限が削除されます。 umaskを読んでください。 –

+0

@ThomasHedden、権限の問題は "Exec形式エラー"を引き起こしませんでした。 –

+0

さて、この種の問題に対処するときに取るべきステップの1つは、 'file RunTests'を使ってバイナリの型を判断することです。 –

答えて

0

-cの引数はg++で、バイナリをリンクしないように指示します。したがって、出力ファイルは実行可能ファイルではなくオブジェクトファイルです。

+0

しかし、-cフラグを削除すると、makeプロセス全体がクラッシュして、未定義の参照がたくさんあります。プロジェクト全体のmain.cppファイルにすでに存在している間に2回目に定義することはできません。 –

+0

テスト実行ファイルに 'main'関数がない場合、それをどのように実行すると思いますか? –

+0

私はポイントを得る。なぜこれらはすべてundefでクラッシュしますか? (しかし、私はそれをコンパイルするための主要な機能を追加する意味ですか?別にどこか別の場所にリンクしてもらえますか? –

関連する問題