web-dev-qa-db-ja.com

LinuxでgoogleTestを共有ライブラリとして設定する方法

Debianは、gTest用のプリコンパイル済みパッケージを提供しなくなりました。フレームワークをプロジェクトのメイクファイルに統合することをお勧めします。しかし、メイクファイルをきれいに保ちたいです。ライブラリに対してリンクできるように、以前のバージョン(<1.6.0)のようにgTestを設定するにはどうすればよいですか?

80
ManuelSchneid3r

始める前に、必ず読んで理解してください Googleからのこのメモ !このチュートリアルはgtestの使用を簡単にしますが、 厄介なバグ を導入する可能性があります。

1. googletestフレームワークを入手する

wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz

または hand で取得します。私はこの小さなハウツーを維持しませんので、もしあなたがそれにつまずいてリンクが古くなったら、気軽に編集してください。

2. Googleテストを展開してビルドする

tar xf release-1.8.0.tar.gz
cd googletest-release-1.8.0
cmake -DBUILD_SHARED_LIBS=ON .
make

3.システムにヘッダーとライブラリを「インストール」します。

この手順は、ディストリビューションごとに異なる場合があるため、ヘッダーとライブラリを正しいディレクトリにコピーしてください。 Debians以前のgtest libs の場所を確認することでこれを達成しました。しかし、これを行うより良い方法があると確信しています。注:make installは危険であり、サポートされていません

$ Sudo cp -a include/gtest /usr/include
$ Sudo cp -a libgtest_main.so libgtest.so /usr/lib/

4.リンカーのキャッシュを更新する

... GNUリンカーがライブラリを認識しているかどうかを確認します

$ Sudo ldconfig -v | grep gtest

出力が次のようになっている場合:

libgtest.so.0 -> libgtest.so.0.0.0
libgtest_main.so.0 -> libgtest_main.so.0.0.0

、 すべて順調。

gTestframeworkを使用する準備ができました。 -lgtestをリンカーフラグとして設定し、オプションで、独自のテストメインルーチンを作成しなかった場合は明示的な-lgtest_mainフラグを設定して、プロジェクトをライブラリにリンクすることを忘れないでください。

ここからは、Googleにアクセスして、フレームワークについて ドキュメント にアクセスして、その仕組みを学びたいと思うかもしれません。ハッピーコーディング!

Edit:これはOS Xでも機能します! "OS XでgoogleTestを適切にセットアップする方法" を参照してください。

133
ManuelSchneid3r

これをubuntuユーザー向けに具​​体的に答えさせてください。まず、gtest開発パッケージをインストールします。

Sudo apt-get install libgtest-dev

このパッケージはソースファイルのみをインストールすることに注意してください。必要なライブラリファイルを作成するには、自分でコードをコンパイルする必要があります。これらのソースファイルは、/ usr/src/gtestに配置する必要があります。このフォルダーを参照し、cmakeを使用してライブラリをコンパイルします。

Sudo apt-get install cmake # install cmake
cd /usr/src/gtest
Sudo cmake CMakeLists.txt
Sudo make

# copy or symlink libgtest.a and libgtest_main.a to your /usr/lib folder
Sudo cp *.a /usr/lib

ここで、gtestを使用するプログラムをコンパイルするには、次とリンクする必要があります。

-lgtest -lgtest_main

これは、Ubuntu 14.04LTSで完全に機能しました。

27
amritkrs

通常の「make install」が削除され、cmakeを使用していないため、これを理解するのに時間がかかりました。これが私の経験です。職場では、Linuxにはルートアクセス権がないため、Googleテストフレームワークをホームディレクトリ~/usr/gtest/にインストールしました。

パッケージを〜/ usr/gtest /に共有ライブラリとしてインストールし、サンプルビルドも追加するには:

$ mkdir ~/temp
$ cd ~/temp
$ unzip gtest-1.7.0.Zip 
$ cd gtest-1.7.0
$ mkdir mybuild
$ cd mybuild
$ cmake -DBUILD_SHARED_LIBS=ON -Dgtest_build_samples=ON -G"Unix Makefiles" ..
$ make
$ cp -r ../include/gtest ~/usr/gtest/include/
$ cp lib*.so ~/usr/gtest/lib

インストールを検証するには、次のtest.cを簡単なテスト例として使用します。

    #include <gtest/gtest.h>
    TEST(MathTest, TwoPlusTwoEqualsFour) {
        EXPECT_EQ(2 + 2, 4);
    }

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

コンパイルする:

    $ export GTEST_HOME=~/usr/gtest
    $ export LD_LIBRARY_PATH=$GTEST_HOME/lib:$LD_LIBRARY_PATH
    $ g++ -I $GTEST_HOME/include -L $GTEST_HOME/lib -lgtest -lgtest_main -lpthread test.cpp 
25
user3061373

たまたまCMakeを使用している場合、 ExternalProject_Addhere のように使用できます。

これにより、gtestソースコードをリポジトリに保持したり、どこにでもインストールしたりする必要がなくなります。ダウンロードされ、ビルドツリーに自動的にビルドされます。

8
Fraser

私も同様にこの状況に圧倒され、このために独自のUbuntuソースパッケージを作成することになりました。これらのソースパッケージを使用すると、バイナリパッケージを簡単に作成できます。これらは、この投稿時点での最新のgtestおよびgmockソースに基づいています。

Google Test DEBソースパッケージ

Google Mock DEBソースパッケージ

バイナリパッケージをビルドするには、次の操作を行います。

tar -xzvf gtest-1.7.0.tar.gz
cd gtest-1.7.0
dpkg-source -x gtest_1.7.0-1.dsc
cd gtest-1.7.0
dpkg-buildpackage

いくつかの前提条件のパッケージが必要な場合がありますが、その場合はapt-getをインストールするだけです。それとは別に、ビルドされた.debバイナリパッケージは親ディレクトリに置かれる必要があります。

GMockの場合、プロセスは同じです。

サイドノートとして、ソースパッケージに固有ではありませんが、gtestをユニットテストにリンクするときは、gtestが最初に含まれていることを確認してください( https://bbs.archlinux.org/viewtopic.php?id=156639 )これはよくある落とし穴のようです。

1
Nick Weedon

昨日(2016-06-22)のように他の誰かが同じ状況に陥り、既に投稿されたアプローチで成功しない場合に備えて-Lubuntu 14.04で、次の一連のコマンドを使用して機能しました:

git clone https://github.com/google/googletest
cd googletest
cmake -DBUILD_SHARED_LIBS=ON .
make
cd googlemock
Sudo cp ./libgmock_main.so ./gtest/libgtest.so gtest/libgtest_main.so ./libgmock.so /usr/lib/
Sudo ldconfig
1
Tobias Hermann

Askubuntuからのこの答えは、私にとってうまくいったことです。パッケージlibgtest-devを使用してそこからソースとビルドを取得するため、他のオプションよりもシンプルでエラーが発生しにくいようです。 https://askubuntu.com/questions/145887/why-no-library -files-installed-for-google-test?answertab = votes#tab-top

その答えを参照してください。ただし、ショートカットとして、ここでも手順を示します。

Sudo apt-get install -y libgtest-dev
Sudo apt-get install -y cmake
cd /usr/src/gtest
Sudo cmake .
Sudo make
Sudo mv libg* /usr/lib/

その後、gtestに依存するプロジェクトを問題なくビルドできました。

1
jotadepicas

これにより、gtestとgmock 1.7.0の両方がビルドおよびインストールされます。

mkdir /tmp/googleTestMock
tar -xvf googletest-release-1.7.0.tar.gz -C /tmp/googleTestMock
tar -xvf googlemock-release-1.7.0.tar.gz -C /tmp/googleTestMock
cd /tmp/googleTestMock
mv googletest-release-1.7.0 gtest
cd googlemock-release-1.7.0
cmake -DBUILD_SHARED_LIBS=ON .
make -j$(nproc)
Sudo cp -a include/gmock /usr/include
Sudo cp -a libgmock.so libgmock_main.so /usr/lib/
Sudo cp -a ../gtest/include/gtest /usr/include
Sudo cp -a gtest/libgtest.so gtest/libgtest_main.so /usr/lib/
Sudo ldconfig
0
Bl00dh0und

これにより、Ubuntu/DebianベースのシステムにGoogleテストおよびモックライブラリがインストールされます。

Sudo apt-get install google-mock

DebianベースのイメージでGoogleクラウドでテスト済み。

0

次の方法では、/usr/libディレクトリを手動で変更することを避けながら、CMakeLists.txtファイルの変更を最小限に抑える必要があります。また、パッケージマネージャーでlibgtest-devを完全にアンインストールできます。

これは、libgtest-devパッケージを取得するときに

Sudo apt install libgtest-dev

ソースは/usr/src/googletestの場所に保存されます

CMakeLists.txtをそのディレクトリにポイントするだけで、必要な依存関係を見つけることができます

FindGTestadd_subdirectory(/usr/src/googletest gtest)に置き換えるだけです

最後に、このようになります

add_subdirectory(/usr/src/googletest gtest)
target_link_libraries(your_executable gtest)
0
Rufus

@ ManuelSchneid3rの回答に基づく1.8.1の場合:

wget github.com/google/googletar xf release-1.8.1.tar.gz 
tar xf release-1.8.1.tar.gz
cd googletest-release-1.8.1/
cmake -DBUILD_SHARED_LIBS=ON .
make

それからmake installを実行しました。これは1.8.1で動作しているように見えましたが、@ ManuelSchneid3rに続いて次のことを意味します。

Sudo cp -a googletest/include/gtest /usr/include
Sudo cp -a googlemock/include/gmock /usr/include
Sudo cp `find .|grep .so$` /usr/lib/
0
ntg