5

私は現在、C++のプログラムでMakeFilesを作成して使用する方法を学んでいます。通常の.cppクラスのMakefileを作成して実行できましたが、テストクラスに問題があります。テストのために、Code :: BlocksでGtestを使用しており、「リンカー設定」のTest_A.cppファイルに次を追加します。

 /usr/lib/libgtest.a
 /usr/lib/libgtest_main.a

他のリンカーオプションについては、「-pthread」を付けました。何らかの方法でこれらのライブラリをmakefileに追加する必要があることは知っていますが、その方法がわかりません。当初は3行目に追加する必要があると思っていましたが、試行するたびに、次のタイプのエラーが数千行返されます。

 undefined reference to `testing::Test::TearDown()
 undefined reference to `testing::Test::~Test()  etc....

私のmakefile:

1. all: Test

2. Test_A.o: Test_A B.h
3.      g++ -c Test_A.cpp -o Test_A.o

4. Test: Test_A.o
5.      g++ -o Test Test_A.o

6. clean:
7.      rm -rf *o *~
4

2 に答える 2

8

ライブラリはリンクラインに追加されます:

g++ -o Test Test_A.o /usr/lib/libgtest.a /usr/lib/libgtest_main.a -lpthread
于 2013-03-16T04:42:32.800 に答える
8

最終的なバイナリを構築するときに、ライブラリ名のリストをリンカに渡す必要があります。LDFLAGSリンカに渡されるフラグのリストを示すためにMakefilesで使用される変数です。

  • ライブラリlibabc.aまたはlibabc.soにリンクするには、リンカーフラグをとして渡す必要があります-labc

  • -Lライブラリの場所を指定するには、フラグを使用する必要があります。LD_LIBRARY_PATHリンカは、で定義されたディレクトリに加えて、ライブラリのディレクトリも検索することに注意してください/etc/ld.so.conf

あなたの場合はオプションですが-L/usr/lib(ディストリビューションはすでにライブラリを取得するようにld.so.confを設定しているはずな/usr/libので)、別の場所に変更したい場合に備えて、以下に示します。

LDFLAGS := -lpthread -lgtest -lgtest_main -L/usr/lib

all: Test

Test_A.o: Test_A B.h
     g++ -c Test_A.cpp -o Test_A.o

Test: Test_A.o
     g++ -o Test Test_A.o $(LDFLAGS)

clean:
     rm -rf *o *~
于 2013-03-16T04:42:47.357 に答える